เครื่องมือสำหรับนักพัฒนา · ตัวแปลงการประทับเวลา Unix
ยุคไมโครวินาทีและนาโนวินาที: ย่อค่า 16 และ 19 หลักให้สั้นลง
· มันทำงานอย่างไร
การประทับเวลา เวลายูนิกซ์ นักพัฒนาเวิร์กโฟลว์
รันไทม์บางรันไทม์ปล่อยช่วงเวลาเป็นไมโครวินาทีหรือนาโนวินาที โดยให้ค่าสิบหกหรือสิบเก้าหลักที่ตัวแปลงวินาทีหรือมิลลิวินาทีไม่สามารถอ่านได้โดยตรง โพสต์นี้จะอธิบายว่ามันมาจากไหนและวิธีย่อให้สั้นลงอย่างปลอดภัย
ตัวเลขสิบเก้าหลักในการติดตาม - time.UnixNano เอาต์พุตวางลงในตัวแปลงและผลลัพธ์ที่ไม่สมเหตุสมผล
ฟิลด์การติดตามสิบเก้าหลักอาจเป็นยุคนาโนวินาที แต่การวางลงในตัวแปลงนี้โดยตรงไม่ได้ทดสอบสมมติฐานดังกล่าว ToolAcre ยอมรับวินาทีหรือมิลลิวินาที ข้อผิดพลาดของช่วงยังบอกเป็นนัยว่าหมายเลขฐานข้อมูลขนาดใหญ่อาจใช้ไมโครวินาทีหรือนาโนวินาที ซึ่งทำให้ผู้ใช้ทำให้เป็นมาตรฐานก่อนตีความ
เก็บข้อความต้นฉบับไว้ในขณะที่กำลังตรวจสอบ การแปลงเป็นตัวเลข JavaScript ธรรมดาสามารถเปลี่ยนตัวเลขลำดับต่ำได้ก่อนที่จะเกิดการหารใดๆ สคีมา คำสั่งการบันทึก หรือคำจำกัดความของคอลัมน์ฐานข้อมูลของผู้ผลิตเป็นหลักฐานที่ดีกว่าความยาวของภาพ โดยเฉพาะอย่างยิ่งสำหรับตัวนับที่ไม่ใช่ยุค Unix เลย
ความละเอียดทั่วไปสี่ประการ ได้แก่ วินาที มิลลิวินาที ไมโครวินาที และนาโนวินาที โดยจะมีการนับตัวเลขสำหรับวันที่ปัจจุบัน
วินาทีก้าวหน้าขึ้นหนึ่งครั้งต่อวินาที เร็วขึ้นหนึ่งมิลลิวินาทีหนึ่งพันเท่า ไมโครวินาทีหนึ่งล้านครั้ง และนาโนวินาทีหนึ่งพันล้านครั้ง ประมาณวันที่ปัจจุบันเหล่านี้มักจะปรากฏเป็นทศนิยมสิบ, สิบสาม, สิบหกและสิบเก้าหลัก สิ่งสำคัญ "บ่อยครั้ง": สัญญาณเชิงลบ วันที่เริ่มต้น และช่วงที่ห่างไกลนั้นผิดกฎเกณฑ์เฉพาะตัวเลขเท่านั้น
เกณฑ์อัตโนมัติของแผงควบคุมแยกความแตกต่างเพียงไม่กี่วินาทีจากมิลลิวินาทีที่มีขนาด 10¹¹ ค่าไมโครวินาทีสิบหกหลักเกินขอบเขตนั้น และจะถือเป็นมิลลิวินาที โดยทั่วไปจะเกินวันที่ตั้งใจไว้หนึ่งพันเท่า เลือกหน่วยหลังจากลดความละเอียดที่ไม่รองรับเป็นชื่อเส้นทางแล้วเท่านั้น
ป้ายความละเอียดสี่ป้ายเป็นเรื่องปกติ แต่การนับตัวเลขเพียงอย่างเดียวไม่ใช่สัญญารูปแบบ
โครงร่างตั้งชื่อ API และผลิตภัณฑ์จัดเก็บข้อมูลหลายภาษา แต่ไม่มีไฟล์ต้นฉบับสำหรับเครื่องมือนี้ แทนที่จะสมมติว่าผู้ผลิตรายใดปล่อยฟิลด์ ให้ตรวจสอบเอกสารประกอบของฟิลด์นั้น คำต่อท้ายเช่น `_us` หรือ `_ns` ความแม่นยำที่ประกาศไว้ หรือเหตุการณ์ที่อยู่ติดกันที่รู้จัก ให้หลักฐานว่าความกว้างของทศนิยมไม่สามารถทำได้
นอกจากนี้ ยังแยกแยะยุคสมัยจากระยะเวลาที่น่าเบื่อหน่ายด้วย ตัวนับความละเอียดสูงอาจวัดเวลานับตั้งแต่กระบวนการเริ่มต้นหรือบูต และไม่มีความสัมพันธ์กับ 1970 การแบ่งค่าดังกล่าวจะทำให้ตัวนับมีขนาดเล็กลง ไม่ใช่วันที่ในปฏิทิน ยืนยันทั้งหน่วยและต้นทางก่อนที่จะนำผลลัพธ์ไปยังตัวแปลงยุค
ระบุความละเอียดจากผู้ผลิต ไม่ใช่รายชื่อตัวปล่อยที่สันนิษฐานไว้
หากต้องการลดไมโครวินาทีเป็นมิลลิวินาที ให้ลบแฟกเตอร์ของ 1,000; สำหรับนาโนวินาที ให้ลบ 1,000,000 ออก การหารจำนวนเต็มตั้งใจกันความแม่นยำระดับต่ำกว่ามิลลิวินาที สำหรับค่าบวก การตัดทอนจะใช้เวลานับมิลลิวินาทีนำหน้า สำหรับค่าเนกาทีฟ ให้เลือกกฎการปัดเศษที่ตรงกับตัวสร้าง แทนที่จะถือว่าการแบ่งส่วนสตริงมีความหมายเหมือนกัน
ดำเนินการกับข้อความทศนิยมหรือ BigInt เมื่อความแม่นยำมีความสำคัญ การหารจุดทศนิยมสามารถเริ่มต้นจากตัวเลขสิบเก้าหลักที่ปัดเศษไว้แล้ว เก็บส่วนที่เหลือที่ถูกทิ้งไปไว้ข้างๆ ทันทีที่แปลงแล้ว หากการตรวจสอบจำเป็นต้องมีลำดับเหตุการณ์ภายในหนึ่งมิลลิวินาที ToolAcre ไม่สามารถแสดงความแตกต่างที่ต่ำกว่ามิลลิวินาทีเหล่านั้นได้
ตัวอย่างการทำงาน: 1700000000123456789 — ตัดเป็นมิลลิวินาที อ่านผลลัพธ์ และจดตัวเลขย่อยมิลลิวินาทีที่คุณตั้งไว้
ใช้ `1738577696123456789` เป็นนาโนวินาที ถือเป็นข้อความทศนิยม หารด้วย 1,000,000 ด้วยเลขคณิตจำนวนเต็ม และรับ 1,738,577,696,123 มิลลิวินาที โดยเหลือเศษ 456,789 นาโนวินาที ป้อนผลหารมิลลิวินาทีอย่างชัดเจน การอ่าน ISO คือ `2025-02-03T10:14:56.123Z`
ส่วนที่เหลือไม่ใช่สัญญาณรบกวน: เหตุการณ์การติดตามสองเหตุการณ์สามารถแชร์ที่แสดงเป็นมิลลิวินาทีในขณะที่ต่างกันด้านล่าง เก็บค่าดิบสำหรับการสั่งซื้อและใช้เอาต์พุตที่ลดลงสำหรับการวางแนวของมนุษย์เท่านั้น การปัดเศษขึ้นเป็น 1,738,577,696,124 จะย้ายช่วงเวลาที่แสดงเป็นมิลลิวินาทีถัดไปและทำให้แหล่งที่มาไม่ถูกต้อง
สามารถตรวจสอบการแบ่งสตริงได้ทีละหลัก โดยทศนิยมหกตำแหน่งที่ถูกลบออกนั้นสอดคล้องกับมาตราส่วนนาโนวินาทีถึงมิลลิวินาทีทุกประการ ในขณะที่คำนำหน้าที่ไม่ได้ถูกแตะต้องยังคงเป็นการนับตามปฏิทิน
ตัวอย่างการทำงาน: รักษาค่า 19 หลักเป็นข้อความในขณะที่ลดเหลือมิลลิวินาที
การรับประกันจำนวนเต็มที่แน่นอนของ JavaScript จะจบลงต่ำกว่าค่ายุคสิบเก้าหลักทั่วไป ในที่สุด parser ของ ToolAcre จะเรียก `Number` ดังนั้นการป้อนข้อความดิบระดับนาโนวินาทีผ่านแผงจึงไม่สามารถรักษาตัวเลขทุกหลักไว้ได้ การจำกัดวันที่และตัวเลือกหน่วยที่รองรับไม่เปลี่ยน Number ให้เป็นคอนเทนเนอร์จำนวนเต็มนาโนวินาที
ใช้ BigInt หรือเส้นทางการประมวลผลล่วงหน้าแบบรับรู้สตริงเพื่อลด จากนั้นส่งผลลัพธ์ขนาดมิลลิวินาทีที่ปลอดภัย ลำดับนี้มีความสำคัญ: การแยกวิเคราะห์ก่อนและหารที่สองอาจทำให้ตัวเลขที่คุณหวังจะคงไว้เสียหายอย่างแม่นยำ การแสดงปฏิทินที่ประสบความสำเร็จไม่ได้พิสูจน์ว่าค่าแหล่งที่มาที่มีลำดับต่ำยังคงอยู่
สิ่งนี้ไม่ครอบคลุมถึง - ความแม่นยำของนาฬิกาซึ่งไม่เกี่ยวข้องกับความละเอียด: การประทับเวลานาโนวินาทียังคงสามารถผิดได้ทีละวินาที
ความละเอียดจะบอกคุณว่าการนำเสนอสามารถแยกแยะค่าต่างๆ ได้อย่างละเอียดเพียงใด มันไม่ได้บอกคุณว่านาฬิกาใกล้กับเวลาจริงแค่ไหน ฟิลด์นาโนวินาทีสามารถได้รับมาจากแหล่งที่ไม่ถูกต้อง ในขณะที่ฟิลด์วินาทีสามารถซิงโครไนซ์ได้ดี ตัวแปลงไม่มีการวัดคุณภาพสัญญาณนาฬิกาและไม่ได้อ้างสิทธิ์ดังกล่าว
ในทำนองเดียวกัน ตัวเลขพิเศษสามารถเสริมความแม่นยำได้ แทนที่จะวัดความแม่นยำ สำหรับการวิเคราะห์เหตุการณ์ ให้เปรียบเทียบนาฬิกาโดยใช้หลักฐานการซิงโครไนซ์ และเปรียบเทียบลำดับเหตุการณ์โดยใช้ตัวนับที่จัดทำเป็นเอกสารดิบ การแปลงปฏิทินให้ความสามารถในการอ่านเท่านั้น อย่าอนุมานความแม่นยำจากทศนิยมทศนิยมยาวๆ หรือจากสามมิลลิวินาทีที่แสดงใน ISO
ประเด็นสำคัญ: ลดเหลือมิลลิวินาทีก่อน จากนั้นจึงแปลง — และวิธีที่ตัวแปลงการประทับเวลา Unix อ่านค่าที่สั้นลงตามหน่วยที่ระบุ
ลดความละเอียดที่ไม่รองรับก่อนการแปลง รักษาต้นฉบับ และระบุส่วนที่เหลือที่ถูกละทิ้ง ToolAcre สามารถทำสิ่งที่สัญญาสัญญาไว้ได้: อ่านวินาทีหรือมิลลิวินาทีที่เป็นผลลัพธ์และแสดงแบบฟอร์ม UTC ท้องถิ่นและ ISO โดยที่หน่วยที่เลือกมองเห็นได้
หากวันที่ที่ทำให้เป็นมาตรฐานยังคงไม่สมเหตุสมผล ให้กลับมาที่จุดเริ่มต้นอีกครั้ง แทนที่จะลบตัวเลขซ้ำๆ ตัวนับตั้งแต่บูต ยุคอื่น หรือการเข้ารหัสที่ไม่มีเอกสาร ล้วนแต่ยังคงผิดพลาดได้ในทุกระดับ ความแม่นยำของหน่วย กำเนิด และจำนวนเต็มเป็นคำถามที่แยกจากกัน ตอบทั้งสามก่อนที่จะเชื่อถือวันที่ที่มนุษย์สามารถอ่านได้
ตัวเลือกที่ชัดเจนมีความสำคัญหลังจากการลดลงเนื่องจากการตรวจหาอัตโนมัติเป็นเพียงค่าเริ่มต้นเท่านั้น การเลือกมิลลิวินาทีจะบันทึกการตัดสินใจก่อนการประมวลผล แทนที่จะขอให้ฮิวริสติกขนาดค้นพบอีกครั้ง