ไทย

เครื่องมือสำหรับนักพัฒนา · ตัวแปลงไวยากรณ์

เหตุใด TOML จึงมีประเภทวันที่-เวลาดั้งเดิม และ JSON ไม่มี (RFC 3339)

· พื้นหลัง

ทอมล์ json การประทับเวลา

สี่ค่าชั่วคราว TOML ที่จำกัดให้แคบลงในสตริง JSON ที่ยกมาโดยไม่มีการประดิษฐ์โซน
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

TOML เป็นรูปแบบเดียวในกลุ่มนี้ที่มีวันที่และเวลาชั้นหนึ่ง ซึ่งทั้งหมดกำหนดโดย RFC 3339 โพสต์นี้จะอธิบาย TOML ประเภทวันที่-เวลาสี่ประเภท เหตุใด JSON จงใจไม่มี และ Conversion เกี่ยวข้องกับสิ่งเหล่านั้นอย่างไร

วันที่ที่กลายเป็นสตริง — การกำหนดค่า TOML พร้อมวันที่เผยแพร่ แปลงเป็น JSON และลดขนาดเป็นข้อความ

วันที่ท้องถิ่น TOML เช่น `1979-05-27` จะกลายเป็นสตริง JSON `"1979-05-27"` อักขระปฏิทินยังคงอยู่ แต่ประเภท TOML ดั้งเดิมกลับไม่เป็นเช่นนั้น การแปลง JSON กลับไปจะเขียนสตริงที่ยกมา ไม่ใช่โทเค็นวันที่ และ ToolAcre เตือนในการแปลงครั้งแรก

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

เหตุใด JSON จึงไม่มีประเภทวันที่ — ความเรียบง่ายของ Crockford, ISO 8601 แบบแผนสตริง และแบบแผนมิลลิวินาทีตั้งแต่ยุคที่แข่งขันเพื่อเติมเต็มช่องว่าง

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

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

JSON ไม่มีประเภทวันที่ดั้งเดิมในตัวแปลงนี้ เหตุผลต้นกำเนิดเป็นหลักฐานที่เก็บข้อมูลภายนอก

TOML แสดงสี่ประเภท: ออฟเซ็ตวันที่-เวลาด้วย Z หรือออฟเซ็ตตัวเลข วันที่-เวลาท้องถิ่นโดยไม่มีโซน วันที่ท้องถิ่น และเวลาท้องถิ่น smol-toml แสดงถึงวัตถุที่มีลักษณะคล้ายวันที่ซึ่งมีข้อมูลเมตาชนิดต่างๆ ToolAcre ระบุแต่ละรายการก่อนที่จะทำให้เป็นมาตรฐาน

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

RFC 3339 เป็นรากฐาน — โปรไฟล์ของ ISO 8601 ที่ TOML ยืม รวมถึงค่าเผื่อการแบ่งช่องว่าง

Normalizer เรียกตัวจัดรูปแบบ ISO ของค่าพาร์เซอร์ และลบเฉพาะเศษส่วนสังเคราะห์ `.000` โดยจะรักษาวินาทีเศษส่วนที่มีความหมายและรูปแบบโลคอลและออฟเซ็ตที่เน้นแหล่งที่มา โค้ดอธิบายสิ่งนี้เป็นข้อความ RFC 3339 แต่บทความนี้ไม่ได้สร้างส่วนคำสั่งข้อกำหนด เช่น ค่าเผื่อตัวคั่นเกินกว่าเอาต์พุตที่ทดสอบ

ตัวอย่างออฟเซ็ตยังคงเป็นข้อความวันที่-เวลา แทนที่จะถูกแปลงเป็นค่า Z สากลโดยเลเยอร์นี้ เพื่อหลีกเลี่ยงการเปลี่ยนแปลงการนำเสนอที่เป็นลายลักษณ์อักษรและคงการตีความชั่วคราวสำหรับแอปพลิเคชันที่เป็นเจ้าของ

ToolAcre เก็บรักษาข้อความชั่วคราวที่เน้นแหล่งที่มาโดยไม่ต้องยืนยัน RFC แบบเต็ม 3339 รายละเอียดการปฏิบัติตามข้อกำหนด

ค่าชั่วคราวทุกค่าจะกลายเป็นสตริง และคำเตือนบอกว่า JSON, YAML และ XML ไม่มีประเภทวันที่ในรูปแบบการแปลงนี้ ออฟเซ็ตไม่ได้ถูกทิ้งโดยเจตนา และค่าท้องถิ่นจะไม่ได้รับมา ข้อมูลที่สูญหายคือหมวดหมู่ประเภท TOML นั่นเอง

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

ตัวแปลงจะรักษาการสะกดแบบท้องถิ่นและการสะกดแบบออฟเซ็ต จากนั้นจะสูญเสียประเภท TOML ดั้งเดิม

ใช้ `odt = 1979-05-27T07:32:00Z`, `ldt = 1979-05-27T07:32:00`, `ld = 1979-05-27` และ `lt = 07:32:00` JSON มีสี่สตริงที่มีการสะกดคำเหล่านั้น คำเตือนแสดงรายการออฟเซ็ตวันที่-เวลา วันที่-เวลาท้องถิ่น วันที่ท้องถิ่น และเวลาท้องถิ่น

แปลง JSON กลับเป็น TOML แต่ละค่าจะถูกยกมา เศษส่วน `00.500Z` ยังคงเป็นเศษส่วน ในขณะที่ค่าทั้งวินาทีจะไม่ได้รับ `.000` นี่เป็นลักษณะการทำงานที่ได้รับการสนับสนุนจริง และแสดงให้เห็นอย่างชัดเจนถึงข้อความที่เก็บรักษาไว้เทียบกับประเภทที่หายไป

ตัวอย่างการทำงาน: TOML ชนิดชั่วคราวทั้งสี่ชนิดกลายเป็นสตริงและส่งคืนเครื่องหมายคำพูด

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

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

ประเด็นสำคัญ: TOML รู้ว่าวันที่คืออะไร JSON รู้เพียงว่าสตริงคืออะไร — และแผงตัวแปลงไวยากรณ์แสดงความแตกต่างนั้นในเบราว์เซอร์ของคุณอย่างไร

TOML รู้ประเภทชั่วคราวสี่ประเภท JSON รับเฉพาะสตริงที่นี่ ToolAcre รักษาการสะกดอย่างระมัดระวังและปฏิเสธที่จะสร้างโซน แต่ประเภทดั้งเดิมหายไปและไม่สามารถสร้างใหม่ได้โดยอัตโนมัติเมื่อส่งคืน

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

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