12 시간 시간 변환


10

도전

12 시간 형식으로 시간을 변환하고 인쇄합니다. HH:MM AM/PM

입력:

  • '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)'

출력 :

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

좋은 포인트

  • 한 자리 숫자 앞의 0 은 괜찮 으며 0도 허용되지 않습니다. 다음 예제가 모두 허용됩니다 .

    • 9:06 AM

    • 09:06 AM

  • 시험 된 모든 999연도는 이후입니다 (각 연도는 정확히 4 숫자 임)

규칙

  • 이것은 이므로 바이트 단위의 가장 짧은 솔루션이 승리합니다.
  • 표준 허점 적용
  • 프로그램뿐만 아니라 기능도 사용할 수 있습니다

권장 테스트 사례 : 00:10:23 --> 12:10 AM12:10:23 --> 12:10 PM.
Arnauld

우리는 거기에 갈. 변경해야 할 것이 있으면 언제든지 수정하십시오. 제안 해 주셔서 감사합니다!
zoecarver


2
프로그램이 실행되는 시간대에 시간이 있다고 가정해도됩니까? (예 : 'Fri Jun 30 2017 21:14:20 GMT-0400 (EDT)'저를 위해)
ETHproductions

9
음, 6 월 31 일은 존재하지 않습니다. 정확합니까?
에릭 라거 그렌

답변:


7

자바 스크립트 (ES6), 69 바이트

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


자바 스크립트 (ES6), 58 55 바이트

당신이 미국에 있다고 가정합니다.

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


자바 스크립트 (ES6), 81 78 바이트

한 자리 시간에 선행 0을 출력하기 전의 응답은 선택 사항이었으며 선행 0이없는 테스트 사례가 추가되었습니다.

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


1
로 변경 ${m>12?'P':'A'}M하려고 생각 ${"AP"[m>12]}M했지만 색인을 정수로 캐스팅하지 않으면 작동하지 않으므로 |0길이가 같습니다. 멋지게 골프를 쳤다.
kamoroso94

,21슬라이스에서 생략 하여 3 바이트를 절약 할 수 있습니다 .
Rick Hitchcock

에 12:10 AM을 반환합니다 Fri Jun 30 2017 12:10:23 GMT-0700 (PDT). PM이어야합니다. 변경 m>12하려면 m>11를 해결해야한다.
Rick Hitchcock

4 바이트를 절약하려면 :d=>(new Date(d).toLocaleString(0,{hour:'numeric',minute:'numeric',hour12:1}))
zoecarver

실제로 다음을 사용하여 실제로 25 바이트를 절약 할 수 있습니다.d=>(new Date(d).toLocaleTimeString().replace(/:\d+/,''))
zoecarver

6

파이썬 2 , 66 바이트

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

온라인으로 사용해보십시오!


이것은 4 자리 미만의 년 동안 실패합니다 (단, 그 숫자와 작동 해야하는지 확실하지는 않습니다).
notjagan

괜찮습니다.
zoecarver

@notjagan 필요가 없습니다. 질문에 나와 있습니다.
Fedone

@totallyhuman 으악, 죄송합니다.
Fedone

로 변경할 int(s[15:18])>11s[15:18]>"11"있습니까?
ETHproductions


4

자바 스크립트 (ES6), 77 바이트

연도에 4 자리 숫자가 있다고 가정합니다.

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

테스트 사례


위와 같이, 나는 더 작게 만들고 답할 수있는 방법을 찾았습니다. 내 코드를 자유롭게 사용하십시오. 내 질문에 대답하는 것이 실제로 비용이 아니라고 생각합니다. d=>(new Date(d).toLocaleTimeString().replace(/:\d+/,''))
zoecarver

@pudility 로케일이 en-US있고 시간대가 인 경우에만 작동합니다 GMT-0700 (PDT). 예를 들어, 이러한 가정 중 어느 것도 나에게 해당되지 않습니다.
Arnauld


1

V , 36 바이트

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

온라인으로 사용해보십시오!

16 진 덤프 :

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

1

PHP, 45 바이트

manatwork 덕분에 개선 된 답변

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

첫번째 시도:

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

PHP CLI를 통한 사용 예 :

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

이것은 나의 첫번째 골프 시도이다.


변수에 대한 필요 $d와 그 방법은 당신이 명시 적으로 제거하기 수 없습니다 echo: <?=(new DateTime($argv[1]))->format('h:i A');.
manatwork





0

C #, 145 바이트

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");}}

풀 / 포맷 버전 :

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();
        }
    }
}


0

MATL , 9 바이트

5:24)16XO

MATL 온라인 에서 사용해보십시오 ! 또는 모든 테스트 사례를 확인하십시오 .

설명

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

설명 좀 주 시겠어요?
완전히 인간적인

1
@totallyhuman 물론, 상기시켜 주셔서 감사합니다. 편집했습니다. 기본적으로 내장 XO은 대부분의 작업을 수행합니다
Luis Mendo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.