Conversión de 12 horas

10

Desafío

Convierta e imprima una hora en un formato de 12 horas. HH:MM AM/PM

Ejemplos

Entrada:

  • 'Fri Jun 30 2017 21:14:20 GMT-0700 (PDT)'
  • 'Fri Jun 30 2017 00:10:23 GMT-0700 (PDT)'
  • 'Fri Jun 30 2017 12:10:23 GMT-0700 (PDT)'
  • 'Sat Jun 31 2018 8:06:20 GMT-0700 (PDT)'
  • 'Fri Jul 01 2017 01:14:20 GMT-0700 (PDT)'
  • 'Sat Apr 10 2020 09:06:20 GMT-0700 (PDT)'

Ouput:

  • 9:14 PM
  • 12:10 AM
  • 12:10 PM
  • 08:06 AM
  • 1:14 AM
  • 09:06 AM

Puntos finos

  • Un cero antes de un número de un dígito está bien , tampoco se permite cero. Los siguientes ejemplos están permitidos :

    • 9:06 AM

    • 09:06 AM

  • Todos los años probados serán posteriores 999(cada año serán exactamente 4 dígitos)

Reglas

zoecarver
fuente
Casos de prueba sugeridos: 00:10:23 --> 12:10 AMy 12:10:23 --> 12:10 PM.
Arnauld
aquí vamos. Siéntase libre de editar si ve algo más que debería cambiar. ¡Gracias por la sugerencia!
zoecarver
Relacionado
No es un árbol
2
¿Podemos suponer que el tiempo se da en la zona horaria en la que se ejecuta el programa? (por ejemplo, 'Fri Jun 30 2017 21:14:20 GMT-0400 (EDT)'para mí)
ETHproductions
99
erm, el 31 de junio no existe. ¿Es eso exacto?
Eric Lagergren

Respuestas:

7

JavaScript (ES6), 69 bytes

d=>new Date(d).toLocaleString(0,{hour:n='numeric',minute:n,hour12:1})


JavaScript (ES6), 58 55 bytes

Asume que estás en los Estados Unidos.

d=>new Date(d).toLocaleTimeString().replace(/:.. /,' ')


JavaScript (ES6), 81 78 bytes

La respuesta antes de generar un 0 inicial en horas de un solo dígito se hizo opcional y se agregaron casos de prueba sin 0 iniciales.

d=>([m,s]=d.slice(16).split`:`,`0${m%12||12}:${s} ${m<12?'A':'P'}M`.slice(-8))

Darrylyeo
fuente
1
Estaba pensando en cambiar ${m>12?'P':'A'}Ma ${"AP"[m>12]}M, pero no funciona sin convertir el índice en un entero (como con |0), lo que lo hace de la misma longitud. Muy bien golfizado.
kamoroso94
Puede omitir ,21en el segmento para guardar 3 bytes.
Rick Hitchcock
Devuelve 12:10 AM para Fri Jun 30 2017 12:10:23 GMT-0700 (PDT). Debería ser PM. Cambiar m>12a m>11debería solucionarlo.
Rick Hitchcock
para ahorrar 4 bytes:d=>(new Date(d).toLocaleString(0,{hour:'numeric',minute:'numeric',hour12:1}))
zoecarver
De hecho, en realidad podría guardar 25 bytes con lo siguiente:d=>(new Date(d).toLocaleTimeString().replace(/:\d+/,''))
zoecarver
6

Python 2 , 66 bytes

lambda s:`int(s[15:18])%12`+s[18:21]+'  APMM'[int(s[15:18])>11::2]

Pruébalo en línea!

totalmente humano
fuente
Esto falla durante años que tienen menos de 4 dígitos (aunque no estoy seguro de si tiene que funcionar con esos).
notjagan
Creo que eso está bien.
zoecarver
@notjagan no tiene que hacerlo, lo dice en la pregunta.
Fedone
@totallyhuman Whoops, lo siento.
Fedone
¿Se puede cambiar int(s[15:18])>11a s[15:18]>"11"?
ETHproductions
5

sh + coreutils, 22 bytes

date +%I:%M\ %p -d"$1"

(Si se permiten segundos, entonces es date +%r -d"$1"suficiente).

Anders Kaseorg
fuente
Impresionantemente pocos bytes! también bien hecho
zoecarver
4

JavaScript (ES6), 77 bytes

Asume que el año tiene 4 dígitos.

s=>`${([,,,h,m]=s.match(/\d./g),x=h%12||12)>9?x:'0'+x}:${m} ${'AP'[h/12|0]}M`

Casos de prueba

Arnauld
fuente
Al igual que arriba, he encontrado una forma más pequeña de crear y responder. Siéntase libre de usar mi código, no creo que realmente sea bueno responder mi propia pregunta. d=>(new Date(d).toLocaleTimeString().replace(/:\d+/,''))
zoecarver
@pudility Esto solo funcionaría si su Locale es en-USy su zona horaria es GMT-0700 (PDT). Por ejemplo, ninguno de estos supuestos es cierto para mí.
Arnauld
1

V , 36 bytes

16x3wC AMÇ^0ü^1[0-2]/12WrP
ç^ä:/é0

Pruébalo en línea!

Hexdump:

00000000: 3136 7833 7743 2041 4d1b c75e 30fc 5e31  16x3wC AM..^0.^1
00000010: 5b30 2d32 5d2f 3132 1857 7250 0ae7 5ee4  [0-2]/12.WrP..^.
00000020: 3a2f e930                                :/.0
James
fuente
1

PHP, 45 bytes

Respuesta mejorada gracias a manatwork

<?=(new DateTime($argv[1]))->format('h:i A');

Primer intento:

<? $d=new DateTime($argv[1]);echo$d->format('h:i A');

Ejemplo de uso a través de php CLI:

php d.php "Sat Apr 10 2020 09:06:20 GMT-0700 (PDT)"

Este es mi primer intento de golf.

jankes
fuente
No hay necesidad de variables $dy de esa manera usted puede deshacerse de la explícita echo: <?=(new DateTime($argv[1]))->format('h:i A');.
manatwork
1

Jalea , 43 bytes

Ḳ5ịṣ”:Ṗṁ3µV’%12‘Dµ1¦µV>11ị⁾PAµ3¦“0: M”żFṫ-7

Pruébalo en línea!

¡Esto es demasiado largo ! Es decir, Jelly apesta a la hora de la manipulación.

EDITAR: ¡Incluso estoy superado por PHP!

Erik el Outgolfer
fuente
0

C #, 145 bytes

namespace System.Linq{s=>{var d=DateTime.Parse(string.Join(" ",s.Split(' ').Skip(1).Take(4)));return d.ToString("h:mm ")+(d.Hour>11?"PM":"AM");}}

Versión completa / formateada:

namespace System.Linq
{
    class P
    {
        static void Main()
        {
            Func<string, string> f = s =>
            {
                var d = DateTime.Parse(string.Join(" ", s.Split(' ').Skip(1).Take(4)));

                return d.ToString("h:mm ") + (d.Hour > 11 ? "PM" : "AM");
            };

            Console.WriteLine(f("Fri Jun 30 2017 21:14:20 GMT-0700 (PDT)"));
            Console.WriteLine(f("Fri Jun 30 2017 00:10:23 GMT-0700 (PDT)"));
            Console.WriteLine(f("Fri Jun 30 2017 12:10:23 GMT-0700 (PDT)"));
            Console.WriteLine(f("Fri Jul 01 2017 01:14:20 GMT-0700 (PDT)"));
            Console.WriteLine(f("Sat Apr 10 2020 09:06:20 GMT-0700 (PDT)"));

            Console.ReadLine();
        }
    }
}
TheLethalCoder
fuente
0

,,, 41 bytes

::18⊢3⊣⇆15⊢3⊣i11>"  APMM"⇆⊢2⟛↔15⊢3⊣i12%s#

Explicación

WIP

totalmente humano
fuente
0

MATL , 9 bytes

5:24)16XO

Pruébalo en MATL en línea! O verificar todos los casos de prueba .

Explicación

5:24    % Push array [5 6 ... 24]
)       % Implicit input. Get characters at those positions. This
        % removes the first four characters with the day of the week
16      % Push 16
XO      % Convert to date string format 16, which is 'HH:MM PM'
        % Implicitly display
Luis Mendo
fuente
¿Podemos tener una explicación?
totalmente humano
1
@totallyhuman Claro, gracias por recordármelo. Editado Básicamente, el constructor XOhace la mayor parte del trabajo
Luis Mendo