ไทย

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

วินาทีหรือมิลลิวินาที? บอกยุค 10 หลักจาก 13 หลัก

· มันทำงานอย่างไร

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

ค่าวินาทีสิบหลักและค่ามิลลิวินาทีสิบสามหลักชี้ไปที่หนึ่งชั่วขณะ
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

ค่ายุคส่วนใหญ่ที่คุณพบในปัจจุบันคือตัวเลขสิบหลัก (วินาที) หรือสิบสามหลัก (มิลลิวินาที) และการคาดเดาผิดจะทำให้วันที่เป็นหมื่นปีออกมา โพสต์นี้จะอธิบายเลขคณิตเบื้องหลังการนับตัวเลข และเหตุใดตัวแปลงจึงควรระบุหน่วยแทนที่จะอนุมาน

1700000000 หรือ 1700000000000? — ทันทีเดียวกันเขียนได้สองวิธีและแดชบอร์ดที่แสดงวันที่ในอนาคตอันไกลโพ้น

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

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

เวลา Unix นับวินาทีที่ผ่านไปจาก 1970-01-01 00:00:00 UTC ภายใต้แบบแผน POSIX ปกติ ตัวนับทะลุหนึ่งพันล้านใน 2001; สำหรับวันที่บวกในปัจจุบัน โดยทั่วไปจะเป็นทศนิยมสิบหลัก ยังคงเป็นเลขสิบหลักจนกว่าจะถึงหมื่นล้านใน 2286 นี่คือคุณสมบัติของสัญลักษณ์ฐานสิบ ไม่ใช่กฎที่รวมเข้ากับสตริงวันที่ ISO ค่าลบก่อนยุคและวันที่ที่อยู่นอกปัจจุบันจะทำให้ทางลัดการนับตัวเลขแบบธรรมดาใช้ไม่ได้

เหตุใดการนับมิลลิวินาทีจึงมีสิบสาม — ตัวประกอบของพัน สามหลักพิเศษ และที่มาของ JavaScript และแบบแผนของ Java

JavaScript Date.getTime() นับมิลลิวินาทีตามอัตภาพ โดยคูณการประทับเวลาวินาทีด้วย 1,000 ศูนย์สามตัวทำให้การนับวินาทีปัจจุบันมีสิบหลักเป็นมิลลิวินาทีสิบสามหลัก ตัวอย่างเช่น 1,700,000,000 วินาทีกลายเป็น 1,700,000,000,000 มิลลิวินาที ทั้งคู่ 2023-11-14T22:13:20.000Z ตัวแปลงที่เพียงแทรกตัวคั่นโดยไม่ระบุหน่วยที่สมมติอาจเปลี่ยนตัวเลขที่ถูกต้องให้เป็นวันที่ที่เป็นไปได้แต่ไม่ถูกต้อง

ในกรณีที่การคาดเดาผิดพลาด — ค่าเล็กๆ ใกล้ยุค, วันที่ก่อน 2001 และวันที่ในอนาคตที่การนับตัวเลขหยุดแยกแยะ

การศึกษาพฤติกรรมล้มเหลวใกล้กับ 1970 เมื่อค่ามิลลิวินาทีอาจสั้น ก่อน 2001 เมื่อวินาทีมีตัวเลขน้อยกว่าสิบหลัก หรือมีตัวนับไมโครวินาทีและนาโนวินาที ToolAcre มีค่าเริ่มต้นในการตีความขนาดที่ต่ำกว่า 10¹¹ เป็นวินาทีและค่าที่มากกว่าเป็นมิลลิวินาที และติดป้ายกำกับหน่วยที่ใช้ เกณฑ์นั้นเป็นเพียงการเดาเชิงปฏิบัติ ไม่ใช่ตัวถอดรหัสรูปแบบที่ชัดเจน การประทับเวลาที่จัดทำโดย API เฉพาะเจาะจงควรได้รับการตีความโดยใช้เอกสารประกอบของ API แม้ว่าความยาวจะผิดปกติก็ตาม

ตัวอย่างการทำงาน: สามค่าจากบันทึกเดียว - 1700000000, 1700000000000 และ 1700000000000000 อ่านเป็นวินาที มิลลิวินาที และไมโครวินาที

จำนวนเต็มสามตัวจากบันทึกภาพประกอบแสดงกับดัก ตีความ 1700000000 เป็นวินาที และ 1700000000000 เป็นมิลลิวินาที: ทั้งคู่แก้ไขเป็น 2023-11-14T22:13:20Z ตีความ 1700000000000000 เป็นไมโครวินาทีแล้วหารด้วยหนึ่งล้านเพื่อให้ได้จำนวนวินาทีที่เท่ากัน ตัวแปลง ToolAcre ยอมรับวินาทีหรือมิลลิวินาที ไม่ใช่โหมดไมโครวินาที: การวางตัวเลขที่สามนั้นโดยไม่แปลงหน่วยก่อนจะไม่ยืนยันช่วงเวลาที่ต้องการ เก็บฟิลด์ดิบและยูนิตไว้ด้วยกันเสมอขณะทำการดีบัก

เหตุใดจึงควรระบุหน่วย ไม่ใช่เดา - วิธีที่ตัวแปลงแสดงหน่วยที่ใช้เพื่อให้มองเห็นสมมติฐานที่ผิดแทนที่จะเงียบ

บริการส่งการประทับเวลาควรตั้งชื่อหน่วยในสคีมาหรือใช้ข้อความ ISO 8601 พร้อมออฟเซ็ตที่ชัดเจน หากฟิลด์เดิมไม่มีเอกสาร ให้เปรียบเทียบค่าหลายค่ากับเวลาเหตุการณ์อื่นที่เชื่อถือได้ก่อนตัดสินใจ วันที่ที่เป็นไปได้โดยบังเอิญเพียงวันเดียวนั้นไม่เพียงพอต่อหลักฐาน ตัวแปลงจะแสดงหน่วยที่ใช้ ทำให้คุณมีโอกาสจับข้อผิดพลาดแบบปัจจัย-1,000 เปลี่ยนหน่วยอย่างชัดเจนและเปรียบเทียบแทนที่จะอาศัยการเดาอัตโนมัติว่าเป็นสัญญา API ระยะยาว

สิ่งนี้ไม่ครอบคลุม — การประทับเวลาที่เก็บเป็นสตริง, ISO 8601 ข้อความหรือวันที่อนุกรมของสเปรดชีต ซึ่งเป็นปัญหาที่แตกต่างกัน

บทความนี้ไม่ได้อธิบายวันที่อนุกรมของ Excel สตริง เช่น 2026-09-28T10:15Z หรือการจัดรูปแบบโซนเวลาของการอ่านนาฬิกาท้องถิ่น สิ่งเหล่านี้เป็นตัวแทนที่แตกต่างกัน การประทับเวลา Unix อ้างถึงทันที ช่วงเวลาเดียวกันนั้นจะปรากฏตามเวลาของนาฬิกาแขวนที่แตกต่างกันในโซนต่างๆ แบบแผนอธิกวินาทียังสมควรได้รับการปฏิบัติแยกต่างหาก และตัวนับที่เซ็นชื่อ 32 บิตมีปัญหาโอเวอร์โฟลว์ใน 2038 ซึ่งแตกต่างจากคำถามวินาทีเทียบกับมิลลิวินาที

ประเด็นสำคัญ: นับตัวเลข จากนั้นยืนยันหน่วย และวิธีที่ตัวแปลงการประทับเวลา Unix อ่านทั้งวินาทีและมิลลิวินาทีโดยมีหน่วยกำกับว่า

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