Alat pembangun · Penukar cap masa Unix
ISO 8601 lwn RFC 3339: dua format tarikh di belakang API respons anda
· Latar belakang
cap masa iso-8601 apis
Kebanyakan API mendakwa menggunakan ISO 8601 dan sebenarnya menggunakan RFC 3339, profil yang lebih ketat yang direka untuk internet. Siaran ini menerangkan kedua-dua dokumen, perbezaannya dan cara ia berkaitan dengan integer zaman.
'ISO 8601' medan yang menolak sah ISO 8601 — tarikh minggu atau nilai ketepatan yang dikurangkan dihantar ke API yang dijangka RFC 3339
Medan API diterangkan secara santai sebagai "ISO 8601" boleh menerima sahaja satu bentuk masa tarikh. Menghantar perwakilan standard-sah yang lain masih boleh gagal penghurainya. Ubatnya bukan untuk membantah dari nama payung; ia adalah untuk mendokumenkan tatabahasa wayar yang tepat dengan contoh dan ujian pengesahan.
ToolAcre menyumbang keluaran kanonik yang stabil daripada `Date.toISOString()`, tetapi ia bukan suite pematuhan untuk setiap perwakilan. Anggap rentetan yang dijana sebagai satu borang pertukaran yang berguna dan bandingkan dengan kontrak API yang sebenarnya anda miliki.
Oleh itu, skema harus menerbitkan ungkapan biasa atau jenis formal sahaja jika ia menggambarkan penghurai dengan tepat. Contoh sahaja berguna, tetapi kes penolakan yang jelas menutup kekaburan.
Standard tarikh yang luas dan tatabahasa API yang sempit tidak boleh ditukar ganti
Borang yang dijana mengandungi tarikh kalendar, `T`, masa melalui milisaat dan mengekori Z. Pelaksanaan memanggilnya ISO 8601 (UTC) dalam UI. Input menerima apa yang JavaScript Tarikh dibaca, termasuk offset eksplisit dan bentuk masa tarikh tanpa zon pemilih tempatan.
Tingkah laku itu jauh lebih sempit daripada penghurai standard yang lengkap. Tarikh minggu, selang waktu, tempoh dan ketepatan yang dikurangkan tidak mempunyai ujian repositori. Rentetan yang diterima oleh satu pelayar Tarikh tidak dijamin merentas bahasa dan borang khusus yang ditolak tidak menafikan kedudukannya di tempat lain.
Ketepatan milisaat tetap output ialah pilihan pemformatan, bukan bukti bahawa sumber mengukur milisaat. Tarikh mungkin telah menerima nilai seluruh saat dan masih mencetak `.000`.
ToolAcre mengeluarkan satu bentuk ISO; ia tidak mengesahkan standard ISO 8601 penuh
Buku kerja mencirikan RFC 3339, tahun dan peraturan mengimbangi mandatori. Tiada teks RFC atau penghurai khusus wujud dalam set sumber, jadi butiran tersebut tidak ditegaskan. Kontrak pengarangan memerlukan meninggalkan ketepatan yang tidak disokong daripada memetik tajuk dari ingatan.
Jika API anda bermaksud RFC 3339, namakannya dalam skema dan uji terhadap pelaksanaan yang berasaskan spesifikasi sebenar. ToolAcre boleh merapatkan zaman yang diketahui kepada output UTC ISO untuk perbandingan, tetapi ia tidak dapat mengesahkan bahawa input sewenang-wenangnya memenuhi profil tersebut.
Ini ialah perlindungan editorial dan kejuruteraan: profil standard ialah kontrak yang tepat, dan menghuraikannya tanpa teks berisiko mengubah keperluan dalam dokumentasi.
RFC 3339 keperluan memerlukan sumber standard luaran yang tidak terdapat dalam repositori ini
Tuntutan tentang pemisah ganti, penunjuk huruf kecil dan `−00:00` bergantung pada bahasa standard yang tepat. Mereka ditinggalkan di sini. Pengesan zon penukar sendiri mengecam Z tertinggal atau angka `±HH:MM` dan menandakan masa tarikh tanpa zon sebagai setempat; itulah sempadan yang boleh kita sahkan.
Bina pengesahan API daripada contoh yang diterima secara eksplisit dan kes penolakan. Jangan simpulkan kebenaran daripada JavaScript Penghurai kemudahan Tarikh. Pelayar yang permisif boleh menormalkan input yang ditolak dengan betul oleh pelayan ketat, menyembunyikan kecacatan kebolehoperasian semasa ujian manual.
Penghurai yang menyedari piawaian khusus harus mengembalikan sebab ralat berstruktur. Membiarkan Tarikh menormalkan input luas boleh menukar pepijat pengesahan API menjadi percanggahan merentas platform kemudian.
Pemisah khusus dan peraturan mengimbangi tidak diketahui ditinggalkan tanpa teks standard
Nilai zaman menjadikan aritmetik dan susunan padat apabila unit dan asalan ditetapkan. Masa tarikh tekstual menjadikan bacaan UTC atau mengimbangi kelihatan kepada orang dan mengekalkan penunjuk itu dalam transit. Banyak API memilih satu rentetan berkanun untuk mengelakkan JavaScript integer atau kekaburan unit.
Jika API membawa kedua-duanya, tentukan medan yang berwibawa dan uji perjanjian. Rentetan berformat lapuk di sebelah zaman baru adalah lebih teruk daripada sama ada bersendirian. ToolAcre boleh membandingkan pasangan dengan menukar integer dan menyemak nilai ISO yang dijana, tetapi penguatkuasaan konsisten adalah milik pengeluar.
Contoh yang berjaya: satu seketika, empat perwakilan — saat zaman, milisaat zaman, rentetan RFC 3339 dalam UTC dan satu dengan offset setempat
Gunakan segera `2025-02-03T10:22:00.000Z`. Bentuk zamannya ialah 1,738,578,120 saat dan 1,738,578,120,000 milisaat. Bacaan mengimbangi eksplisit ialah `2025-02-03T12:22:00+02:00`; menghuraikannya dalam ToolAcre mengembalikan zaman yang sama dan baris UTC ISO berkanun.
Ini ialah empat perwakilan yang boleh disahkan repositori: saat, milisaat, output toISOString dan rentetan mengimbangi angka yang dihuraikan Tarikh. Contoh itu tidak mendakwa setiap penghurai luaran menerima ketepatan pecahan yang sama atau sintaks mengimbangi. Jalankan pengesahan API sendiri sebelum penghantaran.
Menolak offset +02:00 daripada jam bertulis menghasilkan 10:22 UTC. Persamaan mudah itu sudah cukup untuk menguji input khusus ini tanpa membuat generalisasi tatabahasa standard penuh.
Contoh yang berfungsi: satu saat dalam empat bentuk repositori ini boleh mengesahkan
HTTP pengepala dan tarikh e-mel menggunakan kontrak teks yang tidak dilaksanakan di sini. ToolAcre tidak memformat protokol tersebut dan tidak juga menjanjikan bahawa output ISOnya boleh digantikan. Semerta cap masa boleh sama manakala perwakilan wayar yang diperlukan berbeza.
Simpan siri protokol dalam penyesuai khusus dengan lekapan yang disalin daripada spesifikasi berwibawa. Gunakan penukaran zaman untuk mengesahkan segera asas, kemudian uji tatabahasa secara berasingan. Ini menghalang nilai kalendar yang betul daripada lulus semakan dalam sampul surat yang tidak sah secara sintaksis.
Penyesuai khusus juga harus mengekalkan sama ada offset yang hilang atau tidak diketahui membawa maksud domain. Meratakan setiap tarikh teks menjadi andaian tempatan boleh memusnahkan maklumat tersebut.
Protokol tekstual lain kekal di luar penukar
Tentukan format sempit API anda terima dan bukannya bergantung pada label yang luas. Untuk alat ini, output boleh dihasilkan semula paling selamat ialah rentetan UTC ISO yang dikembalikan oleh `toISOString()` dan input berangka paling selamat termasuk kontrak saat atau milisaat yang jelas.
ToolAcre merapatkan borang tersebut dan melaporkan andaian. Ia tidak mengadili semua ISO 8601 atau RFC 3339 kes tepi. Pemilikan jelas tatabahasa, penetapan unit dan zon adalah yang menjadikan cap masa mudah alih—tidak melampirkan nama standard yang biasa pada medan yang kurang ditentukan.
Kontrak yang tepat membolehkan pelanggan gagal awal dengan mesej yang berguna. Label luas menolak perselisihan ke dalam masa jalan, di mana dua penghurai yang betul boleh memilih subset yang berbeza.