การแปลงเวลา 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)'

ouput:

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

คะแนนที่ดี

  • ศูนย์ก่อนเลขหนึ่งหลักก็โอเคไม่อนุญาตให้มีเลขศูนย์ ตัวอย่างต่อไปนี้ได้รับอนุญาต :

    • 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
ก่อนหน้านี้วันที่ 31 มิถุนายนไม่มีอยู่จริง ถูกต้องหรือไม่
Eric Lagergren

คำตอบ:


7

JavaScript (ES6), 69 ไบต์

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


JavaScript (ES6), 58 55 ไบต์

สมมติว่าคุณอยู่ในสหรัฐอเมริกา

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


JavaScript (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 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

Python 2 , 66 ไบต์

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

ลองออนไลน์!


สิ่งนี้ล้มเหลวสำหรับปีที่มีตัวเลขน้อยกว่า 4 หลัก (แม้ว่าฉันไม่แน่ใจว่าจะต้องทำงานกับมันหรือไม่)
notjagan

ฉันคิดว่าไม่เป็นไร
zoecarver

@ notjagan ไม่จำเป็นต้องพูดถึงในคำถาม
Fedone

@tallyallyhuman อ๊ะขออภัย
Fedone

คุณเปลี่ยนint(s[15:18])>11เป็นs[15:18]>"11"เหรอ
ETHproductions

5

sh + coreutils 22 ไบต์

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

(ถ้าวินาทีได้รับอนุญาตก็date +%r -d"$1"เพียงพอแล้ว)


ไม่กี่ไบต์ที่น่าประทับใจ! ทำได้ดีมากด้วย
zoecarver

4

JavaScript (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

2

Japt 15 ไบต์

ÐU¯24)s8 r.³+SS

ลองออนไลน์!

12 ไบต์ถ้าเราสามารถสันนิษฐานได้ว่าเวลาจะได้รับในเวลาท้องถิ่นของคอมพิวเตอร์:

ÐU s8 r.³+SS

ลองออนไลน์!

วิธีการทางคณิตศาสตร์ 40 ไบต์

tG5 r"^.."_<C?+Z+B:°TnZ)%CÄÃ+" {"AP"gT}M

ทดสอบออนไลน์!



1

PHP, 45 ไบต์

คำตอบที่ดีขึ้นต้องขอบคุณการจัดการ

<?=(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');
จัดการ





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
@tallyallyhuman แน่นอนขอบคุณที่เตือนฉัน แก้ไข โดยทั่วไปแล้วตัวบิวอินXOจะทำงานส่วนใหญ่
Luis Mendo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.