เครื่องมือสำหรับนักพัฒนา · ตัวแปลงการประทับเวลา Unix
Z หมายถึงอะไร: UTC ออฟเซ็ตและตัวกำหนดใน ISO 8601 การประทับเวลา
· มันทำงานอย่างไร
การประทับเวลา ISO-8601 โซนเวลา
ตัวแปลงและ API จะพิมพ์ Instant เป็นสตริง ISO 8601 และ Z หรือออฟเซ็ตต่อท้ายคือส่วนที่ผู้คนข้ามไป โพสต์นี้จะอธิบายรูปแบบทีละชิ้นเพื่อให้คุณสามารถอ่าน UTC และเอาต์พุตในเครื่องได้อย่างถูกต้อง
สองสาย ทันที — 10:00:00Z และ 12:00:00+02:00 เคียงข้างกัน และผู้อ่านที่คิดว่าห่างกันสองชั่วโมง
`2025-02-03T10:00:00Z` และ `2025-02-03T12:00:00+02:00` ชื่อหนึ่งทันที สตริงที่สองแสดงนาฬิกาแขวนล่วงหน้าสองชั่วโมงและให้ค่าชดเชยที่จำเป็นในการลบชั่วโมงเหล่านั้น การอ่านเฉพาะฟิลด์ชั่วโมงจะสร้างช่องว่างระหว่างเหตุการณ์ที่เกิดขึ้นพร้อมกัน
ToolAcre ส่งผ่านสตริงทั้งสองไปที่ Date และส่งคืน epoch วินาที, epoch มิลลิวินาที และสตริง UTC ISO ตามรูปแบบบัญญัติ ผลลัพธ์ตัวเลขที่เท่ากันคือการเปรียบเทียบที่เด็ดขาด หน้าปัดนาฬิกาที่เปลี่ยนแปลงไม่ได้หมายความถึงเวลาที่ผ่านไปที่เปลี่ยนไป เมื่อตัวกำหนดที่ส่วนท้ายคำนึงถึงความแตกต่าง
ขั้นตอนการเปรียบเทียบที่ปลอดภัยคือการทำให้แต่ละสตริงเป็นมาตรฐานเป็นมิลลิวินาทีก่อน หากจำนวนเต็มตรงกัน ผลต่างของนาฬิกาที่ชัดเจนจะแสดงแทนเวลาที่ผ่านไป
กายวิภาคศาสตร์ของ ISO 8601 วันที่-เวลา — วันที่ ตัวคั่น T เวลา วินาทีเศษส่วน และตัวกำหนดโซน
ค่า ISO ที่สร้างขึ้นโดยเครื่องมือมีวันที่ในปฏิทิน `T` ฟิลด์ชั่วโมง-นาที-วินาที เศษส่วนสามหลักมิลลิวินาทีและต่อท้าย `Z` รูปร่างนี้มาจาก `toISOString()` การจัดการอินพุตกว้างขึ้นเนื่องจาก Date แยกวิเคราะห์สตริงที่ให้มา แต่ข้อความแสดงข้อผิดพลาดแนะนำค่าที่ชัดเจน เช่น `2024-03-01T09:30:00Z`
ตัวแยกทำให้ชิ้นส่วนต่างๆ ชัดเจน; ตัวกำหนดเทอร์มินัลทำให้การกำหนดทันที เศษส่วนจะปรับแต่งตำแหน่งภายในไม่กี่วินาทีโดยไม่ต้องเปลี่ยนโซน เมื่อเปรียบเทียบเอาต์พุต API ให้แนบตัวกำหนดขั้นสุดท้ายไว้ การตัดทอนภาพหน้าจอก่อนที่จะลบข้อมูลที่จำเป็นในการจับคู่นาฬิกากับ UTC
Z สำหรับ Zulu — เหตุใด Z จึงหมายถึง UTC ต้นกำเนิดในเขตเวลาทางการทหารและการบิน และเหตุใดจึงไม่เหมือนกับไม่มีผู้กำหนด
ภายในการใช้งานนี้ `Z` ถูกตรวจพบว่าเป็นโซนที่ชัดเจน และ `toISOString()` ใช้สำหรับ UTC บัญชีที่มาทางการทหารของสมุดงานไม่ได้รับการบันทึกไว้ในที่เก็บ ดังนั้นบทความนี้จึงไม่ทำซ้ำว่าเป็นประวัติที่มาจากแหล่งที่มา ข้อเท็จจริงในการดำเนินการแคบลงและสามารถทดสอบได้: Z ต่อท้ายป้องกันการสันนิษฐานตามเวลาท้องถิ่น
ไม่มีตัวกำหนดใดที่ไม่ได้เป็นตัวสะกดแบบอื่นของ Z ToolAcre ตั้งค่า `assumedLocal` สำหรับวันที่-เวลาที่ไม่มี Z หรือออฟเซ็ตตัวเลข จากนั้นจะบอกผู้ใช้ว่าโซนเบราว์เซอร์ใดที่ให้การตีความ การแทนที่ส่วนต่อท้ายที่หายไปด้วย Z จะเปลี่ยนช่วงเวลาที่ตั้งใจไว้เมื่อใดก็ตามที่นาฬิกาดั้งเดิมหมายถึงนาฬิกาท้องถิ่น
ในตัวแปลงนี้ Z ทำเครื่องหมายในรูปแบบ UTC ประวัติการตั้งชื่อเป็นหลักฐานจากแหล่งเก็บข้อมูลภายนอก
คำต่อท้ายเช่น `+02:00` บันทึกความแตกต่างระหว่างนาฬิกาที่เขียนกับ UTC ในขณะนั้น มันไม่ได้ระบุเมือง หลายภูมิภาคสามารถใช้ออฟเซ็ตร่วมกันได้ และภูมิภาคสามารถใช้ออฟเซ็ตอื่นในวันอื่นได้ สตริงจะรักษาการอ่าน ไม่ใช่กฎเกณฑ์ทางการเมืองที่ทำให้เกิดการอ่าน
ข้อจำกัดดังกล่าวมีความสำคัญในกำหนดการที่เกิดซ้ำ API สามารถรายงานเหตุการณ์ที่เกิดขึ้นในอดีตด้วย `+02:00` ได้อย่างซื่อสัตย์ แต่เพียงคำต่อท้ายเพียงอย่างเดียวก็ไม่สามารถคำนวณการประชุม 09:00 ของฤดูหนาวหน้าได้ การแปลง Epoch ต้องการเพียงออฟเซ็ตที่ให้มาเท่านั้น การกำหนดเวลาวอลล์ในอนาคตจำเป็นต้องมีโซนที่มีชื่อและตรรกะการรับรู้กฎภายนอกแผงนี้
ตัวอย่างการทำงาน: หนึ่งยุค สองการอ่าน — ค่า UTC และค่าท้องถิ่นที่ตัวแปลงแสดง และยืนยันว่าพวกเขาตั้งชื่อ Instant เดียวกัน
ใช้ยุค 1,738,577,600 วินาทีสำหรับการตรวจสอบบทความนี้ ตัวแปลงแสดงผล `2025-02-03T10:00:00.000Z` สตริงต้นทางของ `2025-02-03T12:00:00+02:00` แปลงกลับไปเป็นจำนวนเดียวกัน เนื่องจากการอ่านค่าบนผนังสองชั่วโมงต่อมามีความสมดุลโดยออฟเซ็ตสองชั่วโมงที่เป็นบวก
แถวในเบราว์เซอร์อาจแสดงเวลานาฬิกาที่สาม นั่นไม่ได้สร้างเหตุการณ์ที่สาม เป็นการจัดรูปแบบอื่นที่ส่งผ่าน 1,738,577,600,000 มิลลิวินาที ยืนยันตัวตนด้วยวินาทีหรือ ISO จากนั้นใช้นาฬิกาที่มีป้ายกำกับแต่ละรายการสำหรับผู้ชมที่เป็นตัวแทนของโซนเท่านั้น
ความเท่าเทียมกันนี้สามารถกลายเป็นฟิกซ์เจอร์การถดถอยได้: แยกวิเคราะห์สตริงต้นฉบับทั้งสองและยืนยันค่ายุคหนึ่ง การทดสอบนั้นป้องกันการคำนวณออฟเซ็ตโดยไม่ต้องปักหมุดร้อยแก้วที่แสดงขึ้นอยู่กับสถานที่
ตัวกำหนดที่ขาดหายไป — 2024-05-01T10:00:00 เปล่าๆ นั้นไม่ชัดเจน และภาษาต่างๆ ตีความอย่างไร
กรณีที่มีตัวกำหนดขาดหายไปต้องมีการปรับปรุงหนึ่งครั้ง วันที่เปล่า เช่น `2025-02-03` อ่านเป็น UTC ภายใต้กฎ ECMAScript ที่นำมาใช้และทดสอบที่นี่ วันที่-เวลาเปล่า เช่น `2025-02-03T10:00:00` จะถูกอ่านเป็นภาษาท้องถิ่นและถูกตั้งค่าสถานะ การเรียกทั้งสองอย่างง่ายๆ ว่า "คลุมเครือ" จะขัดแย้งกับรหัส
รูปแบบที่ปลอดภัยที่ใช้งานได้จริงสำหรับการแลกเปลี่ยนทันทียังคงมี Z หรือออฟเซ็ตอยู่ด้วย คุณสามารถกำหนดวันที่-เวลาท้องถิ่นได้เมื่อป้อนผ่านการควบคุม `datetime-local` ของแผง แต่คัดลอกสตริง ISO ผลลัพธ์ก่อนที่จะแชร์ การแปลงนั้นจะบันทึกสภาพแวดล้อมปัจจุบันที่ได้มาจากนาฬิกาแขวนทันที
ตัวกำหนดที่ขาดหายไปไม่ได้คลุมเครือเสมอไป การใช้งานนี้ทำให้วันที่แตกต่างจากวันที่-เวลา
ISO 8601 ครอบคลุมสัญลักษณ์มากกว่าที่ตัวแปลงนี้แสดงให้เห็น แต่พื้นที่เก็บข้อมูลไม่มีตัวแยกวิเคราะห์หรือการทดสอบสำหรับช่วงเวลา ระยะเวลา หรือวันที่ในสัปดาห์ การยอมรับวันที่อาจแตกต่างกันไปตามแพลตฟอร์มสำหรับสตริงที่อยู่นอกตัวอย่างเอกสารที่เชื่อถือได้ บทความนี้จึงหลีกเลี่ยงการนำเสนอแผงในฐานะเครื่องมือตรวจสอบไวยากรณ์ ISO ทั่วไป
หากสัญญา API อนุญาตให้มีแบบฟอร์มวันที่แบบพิเศษ ให้ตรวจสอบความถูกต้องด้วย parser ของ API นั้น เส้นทางวันที่ถึงยุคของ ToolAcre เหมาะกับวันที่-เวลาที่ชัดเจนและรูปร่างของตัวเลือกในเครื่องที่เส้นทางดังกล่าวส่งออกมา การแยกวิเคราะห์วันที่ที่ประสบความสำเร็จพิสูจน์ให้เห็นว่าเบราว์เซอร์นี้ยอมรับสตริง ไม่ใช่ว่าผู้บริโภคที่เป็นไปตามมาตรฐานทุกคนจะต้องยอมรับมัน
ระยะเวลา ช่วงเวลา และวันที่ของสัปดาห์อยู่นอกอินพุตที่ยอมรับซึ่งแสดงไว้ที่นี่
อ่านการประทับเวลาจนถึงส่วนต่อท้ายก่อนเปรียบเทียบฟิลด์นาฬิกา Z ยึดนาฬิกาที่เขียนไว้ที่ UTC; ออฟเซ็ตตัวเลขให้เลขคณิตกลับไปที่ UTC; วันที่-เวลาแบบไม่มีเขตขอให้เบราว์เซอร์ใช้การตีความในท้องถิ่น ตอนจบเหล่านี้ตอบคำถามที่แตกต่างกันแม้จะมีคำนำหน้าที่ดูคล้ายกันก็ตาม
ตัวแปลงจะติดป้ายกำกับเอาต์พุตสากลที่สร้างขึ้นและรายงานเมื่อถือว่าใช้เวลาท้องถิ่น ใช้ประกาศเหล่านั้นเป็นส่วนหนึ่งของผลลัพธ์ ไม่ใช่การตกแต่ง ค่าชั่วโมงที่คัดลอกโดยไม่มีตัวกำหนดจะถือเป็นหลักฐานที่ไม่สมบูรณ์ ในขณะที่แถวยุคหรือตามรูปแบบบัญญัติ ISO ช่วยให้ผู้อ่านได้รับข้อมูลครบถ้วนทันที