Chuyển đổi thời gian 12 giờ


10

Thử thách

Chuyển đổi và in ra một thời gian trong định dạng 12 giờ. HH:MM AM/PM

Ví dụ

Đầu vào:

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

Điểm tốt

  • Số 0 trước một số có một chữ số là được , không có số 0 nào cũng được phép. Các ví dụ sau đây đều được cho phép :

    • 9:06 AM

    • 09:06 AM

  • Tất cả các năm được kiểm tra sẽ là sau 999(mỗi năm sẽ có các chữ số chính xác 4 )

Quy tắc


Các trường hợp thử nghiệm được đề xuất: 00:10:23 --> 12:10 AM12:10:23 --> 12:10 PM.
Arnauld

chúng tôi đi đây Hãy chỉnh sửa nếu bạn thấy bất cứ điều gì khác tôi nên thay đổi. cám ơn vì sự gợi ý!
zoecarver


2
Chúng tôi có thể giả định rằng thời gian được đưa ra trong múi giờ mà chương trình đang được chạy không? (ví dụ 'Fri Jun 30 2017 21:14:20 GMT-0400 (EDT)'đối với tôi)
ETHproductions

9
erm, ngày 31 tháng 6 không tồn tại. Điều đó có chính xác không?
Eric Lagergren

Câu trả lời:


7

JavaScript (ES6), 69 byte

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


JavaScript (ES6), 58 55 byte

Giả sử bạn đang ở Hoa Kỳ.

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


JavaScript (ES6), 81 78 byte

Trả lời trước khi xuất ra số 0 đứng đầu trong một giờ có một chữ số được thực hiện tùy chọn và các trường hợp kiểm tra mà không có số 0 đứng đầu đã được thêm vào.

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


1
Tôi đã suy nghĩ về việc thay đổi ${m>12?'P':'A'}Mthành ${"AP"[m>12]}M, nhưng nó không hoạt động mà không chuyển chỉ mục thành một số nguyên (như với |0), làm cho nó có cùng độ dài. Chơi golf độc đáo.
kamoroso94

Bạn có thể bỏ qua ,21trong lát để lưu 3 byte.
Rick Hitchcock

Trả về 12:10 sáng cho Fri Jun 30 2017 12:10:23 GMT-0700 (PDT). Nên PM. Thay đổi m>12để m>11sửa nó.
Rick Hitchcock

để tiết kiệm cho bạn 4 byte:d=>(new Date(d).toLocaleString(0,{hour:'numeric',minute:'numeric',hour12:1}))
zoecarver

Trên thực tế, bạn thực sự có thể lưu 25 byte với các mục sau:d=>(new Date(d).toLocaleTimeString().replace(/:\d+/,''))
zoecarver

6

Python 2 , 66 byte

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

Hãy thử trực tuyến!


Điều này thất bại trong nhiều năm có ít hơn 4 chữ số (mặc dù tôi không chắc liệu nó có phải hoạt động với những chữ số đó không).
notjagan

Tôi nghĩ rằng đó là ổn.
zoecarver

@notjagan nó không phải, nó nói như vậy trong câu hỏi.
Fedone

@totallyhuman Rất tiếc, xin lỗi.
Fedone

Bạn có thể đổi int(s[15:18])>11thành s[15:18]>"11"?
Sản xuất ETH

5

sh + coreutils, 22 byte

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

(Nếu giây được cho phép, thì date +%r -d"$1"đủ.)


ấn tượng vài byte! cũng được thực hiện tốt
zoecarver

4

JavaScript (ES6), 77 byte

Giả sử rằng năm có 4 chữ số.

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

Các trường hợp thử nghiệm


Giống như trên, tôi đã tìm thấy một cách nhỏ hơn để tạo và trả lời. Vui lòng sử dụng mã của tôi, tôi không nghĩ rằng đó thực sự là giá vé để trả lời câu hỏi của riêng tôi. d=>(new Date(d).toLocaleTimeString().replace(/:\d+/,''))
zoecarver

@pudility Điều này sẽ chỉ hoạt động nếu Địa điểm của bạn en-USvà múi giờ của bạn là GMT-0700 (PDT). Chẳng hạn, không có giả định nào trong số này là đúng với tôi.
Arnauld


1

V , 36 byte

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

Hãy thử trực tuyến!

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

1

PHP, 45 byte

Trả lời được cải thiện nhờ công việc

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

Nỗ lực đầu tiên:

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

Ví dụ sử dụng thông qua php CLI:

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

Đây là lần thử golf đầu tiên của tôi.


Không cần biến $dvà theo cách đó bạn có thể thoát khỏi tường minh echo: <?=(new DateTime($argv[1]))->format('h:i A');.
manatwork





0

C #, 145 byte

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

Phiên bản đầy đủ / được định dạng:

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 byte

5:24)16XO

Hãy thử nó tại MATL trực tuyến! Hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình

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

Chúng ta có thể có một lời giải thích?
hoàn toàn là

1
@totallyhuman Chắc chắn, cảm ơn đã nhắc nhở tôi. Đã chỉnh sửa. Về cơ bản, phần dựng sẵn XOthực hiện hầu hết công việc
Luis Mendo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.