Artikel
Tempoh ISO 8601: maksud P1DT2H
Respons API YouTube menyatakan sesebuah video berdurasi PT4M13S. Jemputan kalendar membawa nilai P15DT5H0M20S. Pelayan direktori mencap masa akaun dengan 20260424174227.0Z, yang kelihatan berkaitan tetapi sebenarnya adalah sesuatu yang sama sekali berbeza. Rentetan padat ini mengikut peraturan yang berbaloi diketahui, kerana membacanya secara salah boleh menukar minit kepada bulan. Ini ialah tinjauan format tempoh ISO 8601: maksud setiap huruf, di mana format ini muncul, dan satu perkara halus yang paling besar, iaitu tempoh yang ditulis dengan cara ini tidak selalu merupakan jumlah masa yang tetap.
P, T, dan maksud huruf-huruf itu
Tempoh ISO 8601 bermula dengan P (period). Kemudian datang komponen tarikh, setiap satu ialah nombor diikuti huruf unitnya: Y untuk tahun, M untuk bulan, W untuk minggu, D untuk hari. T memisahkan bahagian tarikh daripada bahagian masa: H untuk jam, M untuk minit, S untuk saat. Setiap komponen adalah pilihan; anda hanya menulis apa yang diperlukan. PT15M ialah 15 minit, P1DT2H ialah satu hari dan dua jam, P3W ialah tiga minggu. T bukan sekadar hiasan: M bermaksud bulan sebelum T dan minit selepasnya, jadi P1M ialah satu bulan manakala PT1M ialah satu minit. Komponen terakhir yang hadir boleh membawa pecahan perpuluhan, seperti PT0.5S untuk setengah saat. Dan unit-unit itu tidak melimpah dengan sendirinya: PT90M ialah cara yang sah sepenuhnya untuk menulis satu jam setengah.

Di mana anda sebenarnya bertemu format ini
Sintaks ini wujud secara senyap di mana-mana sahaja. YouTube Data API melaporkan setiap panjang video sebagai tempoh ISO 8601 (PT4M13S). HTML menerima tempoh dalam atribut datetime bagi elemen time. Jemputan kalendar menggunakannya: piawaian iCalendar (RFC 5545) menulis panjang acara seperti PT1H0M0S, walaupun ia menggugurkan tahun dan bulan daripada tatabahasanya. xs:duration dalam XML Schema meliputi bentuk penuh dan malah membenarkan tanda tolak di hadapan untuk tempoh negatif. Pustaka piawai menghuraikannya secara terus: java.time membaca rentetan P dan T dengan Period.parse dan Duration.parse, dan pembahagian yang sama wujud dalam banyak bahasa lain. Jika anda menghasilkan jadual, suapan atau API yang boleh dibaca mesin, format ini ialah bahasa sejagat bagi "berapa lama".
Sebab P1M bukan bilangan saat yang tetap
PT15M sentiasa 900 saat. P1M tidak: sebulan berlangsung 28, 29, 30 atau 31 hari bergantung pada tempat ia bermula, jadi P1M hanya menjadi konkrit setelah anda mengaitkannya dengan sesuatu tarikh. Malah P1D tidak dijamin 24 jam. Di Kesatuan Eropah, jam dimajukan pada hari Ahad, 29 Mac 2026, jadi hari kalendar itu hanya berlangsung 23 jam: menambah P1D (satu hari kalendar) dan menambah PT24H (tepat 24 jam) pada petang Sabtu yang sama akan tiba pada saat yang berbeza. Inilah sebabnya java.time mempunyai dua jenis, Period untuk unit kalendar dan Duration untuk saat yang tepat, dan sebabnya pustaka tarikh meminta tarikh rujukan sebelum menukar sesuatu tempoh. Anggap komponen Y, M, W dan D sebagai pengiraan kalendar, dan hanya H, M dan S sebagai jumlah masa yang tetap.
Bukan tempoh: 20260424174227.0Z
Rentetan seperti 20260424174227.0Z kelihatan seolah-olah tergolong dalam keluarga yang sama, tetapi ia ialah cap masa, bukan tempoh, dan bukan juga ISO 8601. Ia ialah GeneralizedTime, satu format daripada ASN.1, notasi yang digunakan oleh direktori LDAP dan sijil X.509. Bacalah sebagai medan lebar tetap: tahun 2026, bulan 04, hari 24, kemudian 17:42:27, pecahan pilihan (.0), dan Z untuk UTC. Anda menemuinya dalam atribut Active Directory seperti whenCreated dan whenChanged, dalam eksport LDAP, dan di dalam sijil, di mana RFC 5280 mewajibkan GeneralizedTime untuk tarikh sah bermula tahun 2050. Petunjuk yang membezakannya daripada bentuk padat ISO 8601 ialah ketiadaan T: ISO akan menulis saat yang sama sebagai 20260424T174227Z.

Menyahkod satu tanpa membaca spesifikasi
Untuk satu rentetan sekali sahaja, penukar tempoh ISO kami menghuraikan mana-mana tempoh P/T kepada komponennya dan jumlahnya dalam saat, serta membina semula rentetan itu daripada nombor yang anda taip. Apabila apa yang anda ada ialah dua waktu jam berbanding rentetan tempoh (contohnya syif yang berjalan dari 22:00 hingga 06:30), kalkulator tempoh masa memberikan masa yang berlalu, termasuk rentang yang merentasi tengah malam. Kedua-duanya berjalan sepenuhnya dalam pelayar anda: apa yang anda taip tidak meninggalkan peranti anda. Dan untuk pembacaan pantas tanpa sebarang alat, dua refleks meliputi kebanyakan kes: cari T untuk mengetahui sama ada M bermaksud bulan atau minit, dan ingat bahawa apa-apa di sebelah kiri T ialah pengiraan kalendar, bukan bilangan saat yang tetap.
Alat dalam artikel ini
- Penukar tempoh ISO 8601Hurai dan tukar tempoh IS 8601 (P1Y2M…) kepada komponen dan saat. Dalam pelayar.
- Kalkulator tempoh masaKira tempoh antara dua waktu dalam sehari, termasuk julat melepasi tengah malam. Dalam pelayar.
- Penukar format tarikhTukar tarikh kepada format ISO, AS, Eropah, bertitik, padat dan Unix. Dalam pelayar.
Soalan lazim
Adakah PT1M sama dengan P1M?
Tidak. Huruf M menukar maksud merentasi pemisah T: P1M ialah satu bulan, PT1M ialah satu minit. Ini ialah salah baca format ini yang paling biasa, dan pepijat API pernah dilancarkan akibatnya. Jika ragu-ragu, imbas dahulu untuk mencari T: segala-galanya sebelum T dikira dalam tahun, bulan, minggu dan hari; segala-galanya selepasnya dikira dalam jam, minit dan saat. Tempoh yang dibentuk dengan betul tidak pernah mempunyai unit masa sebelum T atau unit tarikh selepasnya.
Bagaimana saya menulis 90 minit sebagai tempoh ISO 8601?
PT90M dan PT1H30M kedua-duanya sah dan menggambarkan jumlah masa yang sama. ISO 8601 tidak memaksa komponen ke dalam julat konvensionalnya, jadi minit melebihi 59 atau jam melebihi 23 tidak menjadi masalah. Penghurai menerima kedua-dua ejaan; yang mana satu dikeluarkan oleh sesuatu sistem bergantung pada sama ada ia menormalkan. Jika anda menghasilkan tempoh untuk dibaca manusia, PT1H30M lebih mesra; jika anda membandingkan tempoh dalam kod, bandingkan jumlah saatnya berbanding rentetannya, tepat kerana dua rentetan berbeza boleh bermaksud perkara yang sama.
Apakah perbezaan antara tempoh dan selang?
Tempoh menyatakan berapa lama, tanpa kedudukan pada kalendar: P3D ialah tiga hari, bermula di mana-mana sahaja. Selang ISO 8601 mengaitkan sesuatu tempoh kepada tarikh sebenar, ditulis dengan garis miring: 2026-07-04T00:00:00Z/P3D bermaksud tiga hari bermula 4 Julai 2026, dan pasangan mula/tamat seperti 2026-07-04/2026-07-07 menyatakan rentang yang sama. Terdapat juga selang berulang dengan awalan R: R5/2026-07-04T00:00:00Z/P1D bermaksud lima ulangan harian bermula tarikh itu. Selang menyelesaikan kekaburan unit kalendar, kerana P1M yang dikaitkan dengan sesuatu tarikh sentiasa mempunyai satu panjang yang pasti.