4 คะแนน โดย GN⁺ 2023-11-12 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • การที่ Unix Timestamp เข้าสู่ช่วง 1.7 พันล้าน หมายความว่าจำนวนวินาทีสะสมตั้งแต่วันที่ 1 มกราคม 1970 UTC เพิ่มขึ้นถึงระดับนั้นแล้ว โดยค่าตัวอย่างแสดงเป็น 1782553539
  • เครื่องมือแปลงจะแปลง timestamp เป็น GMT, เขตเวลาของผู้ใช้ และเวลาแบบสัมพัทธ์ พร้อมรองรับหน่วยวินาที มิลลิวินาที ไมโครวินาที และนาโนวินาที
  • แสดงเวลาเดียวกันในรูปแบบ ISO 8601 และรูปแบบ RFC หลายแบบควบคู่กัน ทำให้ตรวจสอบความแตกต่างของการแสดงวันที่ระหว่างระบบได้ง่าย
  • Unix Timestamp ชี้ไปยังช่วงเวลาเดียวกันไม่ว่าจะอยู่ที่ใด จึงมีประโยชน์ต่อการ ติดตามและจัดเรียง ข้อมูลวันที่ในแอปพลิเคชันแบบกระจายศูนย์
  • ในวันที่ 19 มกราคม 2038 ปัญหา 32-bit overflow จะเกิดขึ้น ดังนั้นแอปพลิเคชันต้องนำแนวทาง timestamp แบบใหม่มาใช้ หรือย้ายไปยังระบบ 64-bit

หลักอ้างอิงและวิธีแปลงของ Unix Timestamp

  • Unix Timestamp เป็นวิธีจัดการเวลาด้วย ค่าสะสมเป็นวินาที
    • จุดอ้างอิงคือ Unix Epoch ณ วันที่ 1 มกราคม 1970 UTC
    • จำนวนวินาทีที่ผ่านไประหว่างวันที่ใดวันที่หนึ่งกับ Unix Epoch จะกลายเป็นค่า timestamp
    • ค่านี้ชี้ไปยังช่วงเวลาเดียวกัน ไม่ว่าผู้ใช้จะอยู่ที่ใดบนโลก
  • เครื่องมือแปลงบนหน้าเว็บรองรับทั้งการป้อน timestamp และการป้อนวันที่/เวลา
    • timestamp สามารถป้อนเป็นหน่วยวินาที มิลลิวินาที ไมโครวินาที และนาโนวินาทีได้
    • วันที่/เวลาสามารถป้อนปี เดือน วัน ชั่วโมงแบบ 24 ชั่วโมง นาที และวินาที เพื่อแปลงเป็น Unix Timestamp
    • ผลลัพธ์สามารถดูได้ในรูปแบบ GMT, เขตเวลาของผู้ใช้ และเวลาแบบสัมพัทธ์

รูปแบบเวลามาตรฐานที่แสดงควบคู่กัน

  • ตัวอย่าง epoch ปัจจุบันจะแสดงควบคู่กันใน รูปแบบเวลามาตรฐาน หลายแบบ

การแปลงหน่วยเวลาและปัญหาปี 2038

  • หน้านี้แสดงการแปลงหน่วยเวลาที่มนุษย์อ่านได้เป็นจำนวนวินาทีของ Unix Timestamp
    • 1 ชั่วโมง: 3600 วินาที
    • 1 วัน: 86400 วินาที
    • 1 สัปดาห์: 604800 วินาที
    • 1 เดือน อิงตาม 30.44 วัน: 2629743 วินาที
    • 1 ปี อิงตาม 365.24 วัน: 31556926 วินาที
  • ในวันที่ 19 มกราคม 2038 Unix Timestamp จะหยุดทำงานเนื่องจาก 32-bit overflow
    • ก่อนถึงเวลานั้น แอปพลิเคชันหลายล้านรายการต้องนำแนวทาง timestamp แบบใหม่มาใช้
    • หรือย้ายไปยังระบบ 64-bit เพื่อขยายช่วงเวลาที่สามารถใช้งาน timestamp ได้ให้ยาวขึ้น

1 ความคิดเห็น

 
GN⁺ 2023-11-12
ความคิดเห็นบน Hacker News
  • 100 ล้านวินาที ผ่านไปเร็วเกินไป
    อ้างอิงไว้ หน้าแรกของ New York Times ณ เวลา Unix timestamp 1600000034 อยู่ที่นี่:
    https://web.archive.org/web/20200913122714/https://www.nytim...
    และ ณ เวลา 1500000301, 1400000634, 1300007806 อยู่ที่นี่ตามลำดับ:
    https://web.archive.org/web/20170714024501/http://www.nytime...
    https://web.archive.org/web/20140513170354/http://www.nytime...
    https://web.archive.org/web/20110313091646/http://www.nytime...

    • คือ 3.17 ปี
  • Unix timestamp 1 600 000 000 ก็ไม่ได้ผ่านมานานนัก เป็น 2020-09-13 12:26:40 UTC
    การอภิปรายใน HN ตอนนั้นอยู่ที่นี่: https://news.ycombinator.com/item?id=24452885
    บล็อกโพสต์ที่ผมเขียนเพื่อฉลองเหตุการณ์นั้นอยู่ที่นี่: https://susam.net/maze/unix-timestamp-1600000000.html
    100 000 000 วินาทีอยู่ที่ประมาณ 3 ปี 2 เดือน เลยจะได้เห็นเหตุการณ์แบบนี้ทุกๆ ไม่กี่ปี
    ผมว่าเหตุการณ์ที่น่าตื่นตาที่สุดคือ Unix timestamp 2 000 000 000 ซึ่งยังเหลืออีก 9 ปีครึ่ง: 2033-05-18 03:33:20 UTC. เรื่องแบบนี้เกิดขึ้นประมาณทุก 33 ปี 8 เดือนเท่านั้น
    ใน Python, 1700000000 จะออกมาแบบนี้:
    $ python3 -q

    from datetime import datetime
    datetime.utcfromtimestamp(1_700_000_000)
    datetime.datetime(2023, 11, 14, 22, 13, 20)

    GNU date(Linux):
    $ date -ud @1700000000
    Tue Nov 14 22:13:20 UTC 2023
    BSD date(macOS, FreeBSD, OpenBSD ฯลฯ):
    $ date -ur 1700000000
    Tue 14 Nov 2023 22:13:20 UTC

    • 33 ปีเชียวเหรอ! ช่วงปลายยุค 90 ผมใช้เวลาเล่น MUD และไม่รู้ทำไมไฟล์เซฟจำนวนมากถึงใช้ epoch timestamp เป็นชื่อไฟล์
      พอได้ดูแลบางส่วนของ codebase ก็ต้องจัดการไฟล์พวกนั้นเยอะมาก ทั้งหมดเป็นตัวเลขช่วง 800-900 ล้าน
      ถึงจุดหนึ่ง แค่เห็นตัวเลขในช่วงนั้นก็พอเดาได้ทันทีว่าเป็นราวปีไหนเดือนไหน โดยคลาดเคลื่อนไม่กี่สัปดาห์
      สภาพแวดล้อมแปลกๆ ช่วยสร้างพลังพิเศษแปลกๆ ได้
      [0] https://en.wikipedia.org/wiki/Multi-user_dungeon
    • เหตุการณ์ที่น่าตื่นตากว่านั้นคือในเดือนมกราคม 2038 ตอนที่ไปถึงตัวเลขสวยๆ อย่าง 2,147,483,648
    • ผมว่า 2222222222 พิเศษกว่า: Sat Jun 02 2040 03:57:02 GMT+0000
      ถ้าโชคดี อาจได้เห็น 3333333333 ด้วยตาตัวเองก็ได้ คงเป็นวันที่สุดยอดแน่ๆ
  • เป็นจังหวะเหมาะมากที่จะเปิด https://datetime.store/ เพื่อจ้องเล็งเสื้อที่สมบูรณ์แบบ

    • เว็บไซต์นั้นน่าจะล่มยับในวันอังคาร…
      “หัวหน้า! เรากำลังโดน DDoS!”
      “ไม่ใช่หรอกลูก ก็แค่วันอังคารน่ะ”
    • ใช้ของอย่าง นาฬิกานับถอยหลังสู่ความตาย ที่คำนวณเชิงสถิติว่าคุณจะตายเมื่อไหร่ก็ได้นี่
      สงสัยว่าจะหาเสื้อที่พิมพ์เวลานั้นได้ไหม
    • นึกถึงไอเดีย แก้วกาแฟ 1BTC ที่เคยคิดไว้ ตอนนั้นเป็นช่วงแรกๆ ที่ Bitcoin ขึ้นไปถึง 20,000 ดอลลาร์เป็นครั้งแรก
  • ผมเคยถ่างตารอดูจาก 999,999,999 ข้ามไป 1 พันล้าน และคิดว่า “สัปดาห์นี้จะจำไปทั้งชีวิต”
    ตอนนั้นไม่รู้เลยว่าอีก 60 ชั่วโมงต่อมา ทั้งโลกจะจดจำสัปดาห์นั้น

    • Timestamp 1000000000 (Sat 2001-09-08 18:46:40 PDT) ทำให้ระบบรายงานบั๊ก Remedy ที่ใช้ตอนนั้นเกิดบั๊ก
      ระบบเก็บจำนวนวินาทีหลัง epoch เป็นสตริง และสมมติไว้ว่ามันจะอยู่ใน 9 หลัก
      พอถึง 1000000000 ก็เริ่มตัดหลักสุดท้ายทิ้ง เลยย้อนกลับไปเป็น Sat 1973-03-03 01:46:40 PST แล้วเดินหน้าด้วยความเร็ว 10% ของเวลาจริง แก้ได้ค่อนข้างเร็ว
    • จำไม่ได้ว่ามันใกล้กันขนาดนั้น แต่สมัยนั้นผมอ่าน Slashdot แบบติดงอมแงม และตอน 9/11 มันก็ช่วยได้
      เหตุการณ์ epoch ก็น่าจะถูกพูดถึงแน่นอน
  • ปี 2009 ผมเคยไปงานรวมตัว 1234567890 ที่จัดในล็อบบี้โรงแรมแห่งหนึ่งใน Boston

    • ตอนนั้นทำกะกลางคืนอยู่บน trading floor ของธนาคารใหญ่
      หัวหน้าทีมซัพพอร์ตเทคนิคด้านอนุพันธ์บอกว่าช่วงเวลานั้นกำลังจะมาถึง ผมเลยเปิด shell แล้วรันคำสั่ง watch กับคำสั่ง date ที่พิมพ์วินาที epoch ออกมาเพื่อเฝ้าดูวินาทีนั้น
      จากนั้นก็กลับไปทำงานต่อ
    • จำวินาทีนั้นได้! ตอนนั้นอยู่ที่ไหนสักแห่งอย่างบาร์ แต่เตรียมตัวไว้แล้วเลยพกแล็ปท็อปไปด้วย
      ผมกดลูกศรขึ้นกับ Enter รัวๆ เพื่อไม่ให้พลาด
  • หนึ่งในส่วนที่ชอบใน A Deepness in the Sky ของ Vinge คือการใช้เวลาแบบฐานสิบ: หน่วยอย่าง ksec, Msec
    มีสเกลลอการิทึมเจ๋ง ๆ ที่แสดงการแปลงระหว่างเวลาบนโลกกับเวลาแบบฐานสิบ

    • ใช่เลย! ต้องขอบคุณหนังสือเล่มนั้น ตอนนี้เลยรู้ได้โดยไม่ต้องค้นว่า ksec ประมาณ 15 นาที และ Msec ประมาณ 2 สัปดาห์
      เวลาคำนวณคร่าว ๆ มีประโยชน์บ่อยกว่าที่คิด
      ส่วนที่ว่า Gsec ประมาณหนึ่งในสามของศตวรรษนั้นรู้อยู่แล้วจากข้อสังเกตของ Tom Duff
      คงยังไม่น่าจะย้ายไปใช้ระบบแบบนี้กันทั่วไปในเร็ว ๆ นี้ เพราะหน่วยที่ผูกกับจังหวะชีวภาพนั้นสะดวกเกินไป
      แต่ก็แอบแปลกใจเล็กน้อยที่ไม่ค่อยเห็นใช้มากกว่านี้เวลาพูดถึงมนุษย์ในอวกาศ
      [0] "ในหนึ่งปีมีกี่วินาที? ถ้าผมบอกคุณว่ามี 3.155 x 10^7 คุณคงไม่คิดจะจำด้วยซ้ำ แต่ในทางกลับกัน ใครจะลืมได้ว่า ภายในความคลาดเคลื่อนครึ่งเปอร์เซ็นต์ pi วินาทีคือหนึ่ง nanocentury" --Tom Duff
    • นักโบราณคดีซอฟต์แวร์ ในหนังสือเล่มนั้นเข้าใจผิดว่า epoch ของ time_t ไม่ใช่แค่ปี 1970 แต่ชี้ไปที่การลงจอดบนดวงจันทร์ :)
    • Emergents ก็ดีเหมือนกัน เป็นโลกที่พวกเสรีนิยมสายก้าวหน้าสร้างยูโทเปีย มีอัตราการจ้างงาน 100% และมอบพระราชวังเพชรให้ทุกคน
  • เหลืออีก 5,148 วันจนถึง 19 มกราคม 2038
    ถ้าผมมีชีวิตอยู่ถึงตอนนั้น วันถัดไปก็จะเป็นวันเกิดครบรอบ 65 ปีของผมพอดี เหมือนมาถึงตรงกับดิจิทัลอาร์มาเกดดอนเป๊ะ

  • แทนที่จะฉลองจังหวะที่การแสดงผลเลขฐานสิบเปลี่ยน น่าจะสมเหตุสมผลกว่าที่จะฉลอง จังหวะที่บิตในตำแหน่งค่อนข้างสูงเปลี่ยนจาก 0 เป็น 1

  • ชอบหน่วย หนึ่งร้อยล้านวินาที
    ยาวกว่าหนึ่งปี แต่สั้นกว่าสิบปี ยุค 1.6e8 คือช่วงโรคระบาด แล้ว 1.7e8 จะนำอะไรมา?

  • ดีใจที่คนอื่น ๆ ก็ตื่นเต้นกับเรื่องแบบนี้เหมือนกัน ถ้าเป็นแฟน UNIX Timeval ลองใช้เครื่องมือ tf นี้ดูได้ [1]
    เพื่อนทำไว้ด้วย C/Lex/Yacc ผมใช้ทุกวันมาตลอด 15 ปีครึ่ง แล้วพอร์ตไปเป็น Golang + Homebrew เพื่อแบ่งปันความสนุกนั้น
    [1] https://github.com/neomantra/tf
    brew tap neomantra/homebrew-tap
    brew install tf
    ลองพิมพ์เลขกลม ๆ เหล่านี้ออกมา tf ตรวจจับอัตโนมัติที่ 10 หลัก ดังนั้น seq ก็เริ่มจากตรงนั้น

    for TV in $(seq -f %.f 1000000000 100000000 2000000000); do echo $TV $TV | tf -d ; done
    2001-09-08 18:46:40 1000000000
    2004-11-09 03:33:20 1100000000
    2008-01-10 13:20:00 1200000000
    2011-03-12 23:06:40 1300000000
    2014-05-13 09:53:20 1400000000
    2017-07-13 19:40:00 1500000000
    2020-09-13 05:26:40 1600000000
    2023-11-14 14:13:20 1700000000
    2027-01-15 00:00:00 1800000000
    2030-03-17 10:46:40 1900000000
    2033-05-17 20:33:20 2000000000
    ยังมีวันที่น่าสนุกด้วย -g จะตรวจจับหลายรายการในหนึ่งบรรทัด และ -d จะรวมวันที่ไว้ด้วย
    echo 1234567890 __ 3141592653 | tf -gd
    2009-02-13 15:31:30 __ 2069-07-20 17:37:33
    ขอให้ใช้ให้สนุก หวังว่าจะช่วยประหยัดเวลาในการหาว่าเป็นเวลาไหน!