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 AM및 12: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])>11수 s[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.