Conversão de 12 horas

10

Desafio

Converta e imprima uma hora no formato de 12 horas. HH:MM AM/PM

Exemplos

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

Pontos finos

  • Um zero antes que um número de um dígito esteja correto , nenhum zero também é permitido. Os seguintes exemplos são permitidos :

    • 9:06 AM

    • 09:06 AM

  • Todos os anos testados serão posteriores 999(cada ano terá exatamente 4 dígitos)

Regras

zoecarver
fonte
Casos de teste sugeridos: 00:10:23 --> 12:10 AMe 12:10:23 --> 12:10 PM.
Arnauld
aqui vamos nós. Sinta-se à vontade para editar se vir mais alguma coisa que eu deva mudar. Obrigado pela sugestão!
Zoecarver
Relacionado
Não é uma árvore
2
Podemos supor que o tempo é dado no fuso horário em que o programa está sendo executado? (por exemplo, 'Fri Jun 30 2017 21:14:20 GMT-0400 (EDT)'para mim)
ETHproductions
9
31 de junho não existe. Isso é preciso?
Eric Lagergren

Respostas:

7

JavaScript (ES6), 69 bytes

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


JavaScript (ES6), 58 55 bytes

Supõe que você esteja nos Estados Unidos.

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


JavaScript (ES6), 81 78 bytes

A resposta antes de emitir um 0 inicial em horas de um dígito foi tornada opcional e foram adicionados casos de teste sem 0s inicial.

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

darrylyeo
fonte
11
Eu estava pensando em mudar ${m>12?'P':'A'}Mpara ${"AP"[m>12]}M, mas ele não funciona sem converter o índice em um número inteiro (como em |0), o que o torna com o mesmo comprimento. Bem jogado.
precisa saber é o seguinte
Você pode omitir ,21na fatia para salvar 3 bytes.
Rick Hitchcock
Retorna 12:10 para Fri Jun 30 2017 12:10:23 GMT-0700 (PDT). Deve ser PM. Mudar m>12para m>11deve corrigi-lo.
Rick Hitchcock
para economizar 4 bytes:d=>(new Date(d).toLocaleString(0,{hour:'numeric',minute:'numeric',hour12:1}))
zoecarver
Na verdade, você pode realmente salvar 25 bytes com o seguinte: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]

Experimente online!

totalmente humano
fonte
Isso falha há anos com menos de quatro dígitos (embora eu não tenha certeza se precisa trabalhar com eles).
precisa saber é
Eu acho que está tudo bem.
Zoecarver
@notjagan não precisa, diz isso na pergunta.
Fedone 04/07/19
@totallyhuman Opa, desculpe.
Fedone 5/07
Você pode mudar int(s[15:18])>11para s[15:18]>"11"?
ETHproductions
5

sh + coreutils, 22 bytes

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

(Se segundos são permitidos, então date +%r -d"$1"é suficiente.)

Anders Kaseorg
fonte
impressionantemente poucos bytes! também bem feito
zoecarver
4

JavaScript (ES6), 77 bytes

Supõe que o ano tenha 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 teste

Arnauld
fonte
Como acima, encontrei uma maneira menor de criar e responder. Sinta-se à vontade para usar meu código, não acho que seja realmente uma resposta para minha própria pergunta. d=>(new Date(d).toLocaleTimeString().replace(/:\d+/,''))
Zoecarver 4/17
@pudility Isso funcionaria apenas se sua localidade for en-USe seu fuso horário GMT-0700 (PDT). Por exemplo, nenhuma dessas suposições é verdadeira para mim.
Arnauld
1

V , 36 bytes

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

Experimente online!

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
fonte
1

PHP, 45 bytes

Resposta melhorada graças ao manatwork

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

Primeira tentativa:

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

Exemplo de uso através do php CLI:

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

Esta é a minha primeira tentativa de golfe.

jankes
fonte
Não há necessidade de variável $de de que maneira você pode se livrar do explícita echo: <?=(new DateTime($argv[1]))->format('h:i A');.
Manatwork 03/07/19
1

Gelatina , 43 bytes

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

Experimente online!

Isso é supérfluo demais ! Ou seja, Jelly é péssimo na manipulação do tempo.

EDIT: Estou até superado pelo PHP!

Erik, o Outgolfer
fonte
0

05AB1E , 39 bytes

#4è':¡¨`sD11›„APès<12%>0ìR2£R)Á… :M‚øJJ

Experimente online!

Erik, o Outgolfer
fonte
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");}}

Versão completa / formatada:

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
fonte
0

,,,, 41 bytes

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

Explicação

WIP

totalmente humano
fonte
0

MATL , 9 bytes

5:24)16XO

Experimente no MATL online! Ou verifique todos os casos de teste .

Explicação

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
fonte
Podemos ter uma explicação?
totallyhuman
11
@totallyhuman Claro, obrigado por me lembrar. Editado. Basicamente, o embutida XOfaz a maioria do trabalho
Luis Mendo