ไทย

เครื่องมือสำหรับนักพัฒนา · ตัวแปลงการประทับเวลา Unix

UTC, GMT และ TAI: การประทับเวลาใดของคุณที่นับอยู่จริง

· พื้นหลัง

การประทับเวลา เวลายูนิกซ์ โซนเวลา

แทร็กมาตราส่วนเวลาแบบขนาน 3 แทร็กที่ไฮไลต์แทร็ก Conversion ของ Unix
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

GMT, UTC และ TAI มักถือเป็นคำพ้องความหมาย แต่เป็นสามสิ่งที่แตกต่างกันและมีประวัติที่แตกต่างกัน โพสต์นี้จะอธิบายแต่ละรายการและเวลาใดของ Unix และตัวแปลงรายวันที่ติดตามจริง

สามชื่อบนเซิร์ฟเวอร์เดียว — GMT ในส่วนหัวของ Date, UTC ในบันทึก และ TAI ในงานวิจัย ทั้งหมดนี้ในวินาทีเดียวกัน

เซิร์ฟเวอร์สามารถแสดง “GMT” ในโปรโตคอลเดียว “UTC” ในบันทึก และช่วงเวลาอื่นในข้อมูลทางวิทยาศาสตร์ ป้ายนาฬิกาที่คล้ายกันไม่อนุญาตให้ใช้แทนกันได้ ภารกิจแรกคือการระบุสัญญาที่อยู่เบื้องหลังแต่ละฟิลด์ แทนที่จะเปลี่ยนชื่อทุกอย่าง UTC ในเลเยอร์การนำเสนอ

สัญญาของ ToolAcre มีความชัดเจน: วินาทีของ Unix หรือมิลลิวินาทีจะกลายเป็นสตริง ISO 8601 UTC แถว UTC ที่อ่านได้ และแถวในเครื่องของเบราว์เซอร์ ไม่มีตัวเลือกขนาด จำนวนที่ไม่ใช่ Unix จะต้องถูกแปลงโดยใช้คำจำกัดความที่เชื่อถือได้ก่อนที่เส้นทางนี้จะเกี่ยวข้อง

ขนาดบันทึกสินค้าคงคลังที่มีประโยชน์และการจัดลำดับด้านข้างทุกฟิลด์ ป้ายกำกับที่คล้ายกันไม่ควรลบที่มา โดยเฉพาะอย่างยิ่งเมื่อข้อมูลข้ามระบบทางวิทยาศาสตร์และแอปพลิเคชัน

เวลามาตรฐานกรีนิช — หมายถึงเวลาสุริยะที่เส้นเมอริเดียน ประวัติของเวลาดังกล่าวเป็นข้อมูลอ้างอิงของโลก และเหตุใดปัจจุบันจึงเป็นเขตเวลาแทนที่จะเป็นมาตรฐาน

โครงร่างนี้นำเสนอประวัติของเวลามาตรฐานกรีนิชและการใช้งานทางกฎหมายสมัยใหม่ ข้อเท็จจริงเหล่านั้นไม่มีอยู่ในการกำหนดค่าคอนเวอร์เตอร์ แหล่งที่มา หรือการทดสอบ บทความนี้จึงไม่เปลี่ยนที่เก็บโค้ดให้เป็นการอ้างอิงเชิงประวัติศาสตร์โดยการอนุมาน

ในทางปฏิบัติ หากอินพุตแจ้งว่า GMT ให้ตรวจสอบโปรโตคอลที่กำหนด ป้ายนาฬิกาที่ปรากฏเทียบเท่ากับวันที่สมัครทั่วไปยังคงมีข้อกำหนดด้านไวยากรณ์หรือนโยบายที่เฉพาะเจาะจงได้ ToolAcre เอาต์พุตป้ายกำกับ UTC และไม่ควรนำเสนอเป็นตัวแยกวิเคราะห์หรือตัวจัดรูปแบบ GMT

หากความสามารถในการทำงานร่วมกันขึ้นอยู่กับคำศัพท์ ให้เชื่อมโยงข้อกำหนดการควบคุมในการตรวจสอบโค้ด ป้ายแสดงผลไม่ควรอยู่เฉยๆ สำหรับข้อกำหนดเกี่ยวกับรูปแบบเส้นลวด

GMT ประวัติและสถานะทางกฎหมายอยู่นอกหลักฐานที่เก็บ

แถว UTC ถูกสร้างขึ้นโดย `Intl.DateTimeFormat` พร้อมด้วย `timeZone: "UTC"`; แถว ISO มาจาก `toISOString()` การโทรเหล่านั้นพิสูจน์ว่าอินเทอร์เฟซนี้ติดป้ายกำกับการอ่านแบบสากลอย่างไร พวกเขาไม่ได้บันทึกว่า UTC ถูกนำมาใช้เมื่อใด หรือกลไกของสถาบันที่อยู่เบื้องหลัง

สำหรับการดีบัก ป้ายชื่อก็เพียงพอที่จะสร้างการอ้างอิงที่ใช้ร่วมกันโดยไม่ขึ้นกับโซนในเครื่องปัจจุบัน เปรียบเทียบสตริง ISO หรือค่ายุคระหว่างระบบ หากแหล่งที่มาใช้มาตราส่วนอื่น ให้พิสูจน์ความสัมพันธ์ก่อน แทนที่จะถือว่าวันที่คุ้นเคยหมายถึงการนับที่เหมือนกัน

เอาต์พุต Canonical UTC มีประโยชน์อย่างยิ่งสำหรับการเปรียบเทียบสภาพแวดล้อม เนื่องจากจะลบการเลือกโซนในเครื่องออก อย่างไรก็ตาม มันไม่ได้แปลงอินพุตจากมาตราส่วนเวลาที่ไม่ได้ประกาศ

ตัวแปลงจะติดป้ายกำกับ UTC แต่ไม่ได้บันทึกประวัติของคำจำกัดความของ UTC

เวลาอะตอมสากลไม่ได้แสดงในรหัส การกำหนดค่า หรือการทดสอบ ไม่มีออฟเซ็ตปัจจุบัน ช่องว่างในอดีต หรืออัลกอริธึมการแปลงปรากฏที่นี่ การจัดหาค่าคงที่ดังกล่าวจากหน่วยความจำจะถือเป็นเวลาที่ละเอียดอ่อนที่อ้างว่างานห้าม

รักษาค่าที่มีป้ายกำกับ TAI เป็น TAI จนกว่าไลบรารีหรือแหล่งที่มาที่เชื่อถือได้จะทำการแปลงตามวันที่ดังกล่าว การวางโดยตรงเป็นวินาทีของ Unix จะทำให้มีต้นกำเนิดหรือสเกลที่ไม่ถูกต้องโดยไม่แจ้งให้ทราบ และยังสามารถให้ผลลัพธ์เป็นสตริง ISO ที่ผ่านการขัดเกลาแล้ว ความสามารถในการอ่านไม่ใช่การยืนยัน

การแปลงภายนอกควรรวมชื่อมาตราส่วนไว้ในชื่อตัวแปรและประเภท การลบป้ายกำกับนั้นก่อนเลขคณิตจะทำให้ผลลัพธ์ ISO เป็นไปได้ในภายหลังไม่สามารถตรวจสอบได้

TAI ไม่ได้ใช้งาน ดังนั้นจึงไม่มีการยืนยันช่องว่างหรือค่าคงที่ของ Conversion

โมเดล Unix ที่ทดสอบจะก้าวหน้าจากค่ายุค 1,483,228,799 ที่ `2016-12-31T23:59:59Z` ถึง 1,483,228,800 เวลาเที่ยงคืน ไม่มีอินพุตที่ชัดเจนสำหรับ `23:59:60` นั่นคือความหมายที่เป็นรูปธรรมของพฤติกรรมสไตล์ POSIX ในการนำไปใช้งานนี้

มีความสมเหตุสมผลที่จะบอกว่าตัวแปลงแมป Unix นับรวมใน UTC- เอาต์พุตแพ่งที่มีป้ายกำกับภายใต้กฎนั้น อาจเป็นการเข้าใจผิดหากเรียกจำนวนเต็มว่านับวินาทีอะตอมที่แน่นอนในทุก ๆ การก้าวกระโดดในอดีต เครื่องมือนี้สร้างวันที่ของซอฟต์แวร์ ไม่ใช่การวัดมาตราส่วนเวลาในห้องปฏิบัติการ

ความแตกต่างนั้นละเอียดอ่อนแต่ใช้งานได้จริง: การคำนวณลำดับสืบทอดตามแบบแผนของ Unix ในขณะที่การแสดงผลทางแพ่งสืบทอดการจัดรูปแบบวันที่และนานาชาติ ไม่มีเส้นทางใดที่เปิดเผยข้อมูลเมตาเวลาอะตอมมิก

โมเดล Unix ที่ทดสอบจะจับคู่ POSIX-style วินาทีลงในป้ายกำกับ UTC โดยไม่มีค่าวินาทีกระโดด

ตัวอย่างของสมุดงาน HTTP และเวลาทางกฎหมายของอังกฤษจำเป็นต้องมีโปรโตคอลภายนอกและแหล่งข้อมูลทางกฎหมาย พวกเขาจะถูกละเว้น เมื่อใช้ส่วนหัวหรือบันทึกที่มีการควบคุม ให้ปฏิบัติตามข้อกำหนดที่แท้จริง แทนที่จะเลือก UTC หรือ GMT ถ้อยคำที่อิงตามความเทียบเท่าทางภาษา

ภายในโมดูลนี้ `GMT` อาจปรากฏเป็นส่วนหนึ่งของการเรนเดอร์ออฟเซ็ตระยะสั้นของ Intl สำหรับออฟเซ็ตเป็นศูนย์ แต่นั่นเป็นเอาท์พุตของฟอร์แมตเตอร์ ไม่ใช่สัญญาว่าจะสร้างวันที่ของโปรโตคอล แยกการแสดงผล UI ออกจากการทำให้เป็นอนุกรมในรูปแบบลวดและคำศัพท์ทางกฎหมาย

ตัวจัดรูปแบบที่ส่งคืนป้ายกำกับศูนย์ออฟเซ็ตนั้นไม่เพียงพอต่อการตรวจสอบความถูกต้องของโปรโตคอล ทดสอบส่วนหัวแบบซีเรียลไลซ์แบบเต็มหรือบันทึกที่ได้รับการควบคุมด้วยตัวแยกวิเคราะห์และฟิกซ์เจอร์เฉพาะ

โปรโตคอลและการใช้ทางกฎหมายของ GMT ต้องใช้แหล่งที่มาภายนอกและละไว้

GPS เวลาและมาตราส่วนวันที่ทางดาราศาสตร์อยู่นอกโหมดที่ยอมรับ UI นำเสนอการตรวจจับแบบวินาที มิลลิวินาที หรือแบบอัตโนมัติเท่านั้น และหน่วยที่รองรับทั้งสองจะถือว่าอยู่ในยุค Unix ไม่มีช่องทำเครื่องหมายที่เปลี่ยนจุดเริ่มต้นหรือแบบแผนก้าวกระโดด

ตัวเลขจากเครื่องชั่งอื่นควรมีฉลากผ่านการกลืนกินและการเก็บรักษา แปลงด้วยวิธีที่จัดทำขึ้นตามจุดประสงค์และคงไว้ซึ่งต้นฉบับ เฉพาะค่า Unix ที่ได้รับเท่านั้นที่อยู่ในแผงนี้ มิฉะนั้นผลลัพธ์ที่น่าเชื่อถือสามารถปกปิดความไม่ตรงกันของพื้นฐานได้

การปฏิเสธสเกลที่ไม่ได้รับการสนับสนุนจะปลอดภัยกว่าการให้ค่าคงที่ที่คาดเดาได้ การชดเชยมาตราส่วนเวลาอาจขึ้นอยู่กับวันที่ และความแม่นยำที่ผิดพลาดในที่นี้สามารถจัดลำดับข้อสังเกตทางวิทยาศาสตร์ใหม่ได้

GPS และมาตราส่วนทางดาราศาสตร์ไม่ได้รับการยอมรับโหมด

พูด UTC เมื่ออ้างถึงแถวสากลของ ToolAcre เพราะนั่นคือสิ่งที่แหล่งที่มาร้องขอและป้ายกำกับ UI พูด Unix วินาทีหรือมิลลิวินาทีสำหรับการป้อนตัวเลข หลีกเลี่ยงข้อความกว้างๆ ที่ยุบ UTC, GMT และเวลาปรมาณูให้เป็นคำพ้องความหมาย

ความแม่นยำในการตั้งชื่อเป็นเครื่องมือในการดีบัก โดยจะระบุว่าการเปลี่ยนแปลงใดที่จำเป็นและการอ้างสิทธิ์ใดที่ยังไม่ได้รับการยืนยัน ตัวแปลงนี้ให้หลักฐานที่ชัดเจนสำหรับเส้นทางเดียว—Unix นับถึง UTC/local ดิสเพลย์—และจงใจไม่ให้ข้อเสนอใด ๆ สำหรับสเกลที่ไม่เกี่ยวข้อง

เมื่อเขียนเอกสาร ให้แนบคำศัพท์แต่ละคำลงในช่องหรือฟอร์แมตเตอร์ที่เป็นรูปธรรม คลุมเครืออ้างว่าทั้งสาม "หมายถึงเวลาเดียวกัน" ปกปิดความรับผิดชอบในการแปลงที่แน่นอน