Tanpa unggah, 100% lokal, tanpa akun

Artikel

Durasi ISO 8601: apa arti P1DT2H

Respons YouTube Data API menyebutkan sebuah video berdurasi PT4M13S. Undangan kalender membawa P15DT5H0M20S. Server direktori memberi cap waktu akun dengan 20260424174227.0Z, yang terlihat berkaitan tetapi sebenarnya sama sekali berbeda. String yang ringkas ini mengikuti aturan yang layak diketahui, karena membacanya secara keliru mengubah menit menjadi bulan. Ini adalah penjelajahan format durasi ISO 8601: apa arti huruf-hurufnya, di mana format ini muncul, dan satu kehalusan besarnya, yaitu bahwa durasi yang ditulis dengan cara ini tidak selalu merupakan jumlah waktu yang tetap.

P, T, dan arti huruf-hurufnya

Durasi ISO 8601 dimulai dengan P (period). Kemudian muncul komponen tanggal, masing-masing berupa angka diikuti huruf satuannya: Y tahun, M bulan, W minggu, D hari. Sebuah T memisahkan bagian tanggal dari bagian waktu: H jam, M menit, S detik. Setiap komponen bersifat opsional; Anda hanya menulis apa yang diperlukan. PT15M berarti 15 menit, P1DT2H berarti satu hari dan dua jam, P3W berarti tiga minggu. T bukan sekadar hiasan: M berarti bulan sebelum T dan menit sesudah T, sehingga P1M adalah satu bulan sedangkan PT1M adalah satu menit. Komponen terakhir yang ada boleh membawa pecahan desimal, seperti pada PT0.5S untuk setengah detik. Dan satuan-satuan ini tidak berpindah dengan sendirinya: PT90M adalah cara yang sepenuhnya valid untuk menulis satu setengah jam.

Anatomi durasi ISO 8601 P3Y6M4DT12H30M5S: P membuka periode, Y M D adalah satuan tanggal, T beralih ke waktu, H M S adalah satuan waktu

Di mana Anda benar-benar menemui format ini

Sintaks ini diam-diam ada di mana-mana. YouTube Data API melaporkan setiap panjang video sebagai durasi ISO 8601 (PT4M13S). HTML menerima durasi dalam atribut datetime dari elemen time. Undangan kalender menggunakannya: standar iCalendar (RFC 5545) menulis panjang acara seperti PT1H0M0S, meskipun ia menghilangkan tahun dan bulan dari tata bahasanya. xs:duration milik XML Schema mencakup bentuk lengkap dan bahkan mengizinkan tanda minus di depan untuk durasi negatif. Pustaka standar mengurainya secara langsung: java.time membaca string P dan T dengan Period.parse dan Duration.parse, dan pembagian yang sama ada di banyak bahasa lain. Jika Anda menghasilkan jadwal, feed, atau API yang dapat dibaca mesin, format ini adalah bahasa bersama untuk "berapa lama".

Mengapa P1M bukan angka detik yang tetap

PT15M selalu berarti 900 detik. P1M tidak: satu bulan berlangsung 28, 29, 30, atau 31 hari tergantung dari mana ia dimulai, sehingga P1M baru menjadi konkret setelah dikaitkan dengan sebuah tanggal. Bahkan P1D pun tidak dijamin 24 jam. Di Uni Eropa, jam dimajukan pada hari Minggu, 29 Maret 2026, sehingga hari kalender itu hanya berlangsung 23 jam: menambahkan P1D (satu hari kalender) dan menambahkan PT24H (tepat 24 jam) ke malam Sabtu yang sama menghasilkan momen yang berbeda. Inilah sebabnya java.time memiliki dua tipe, Period untuk satuan kalender dan Duration untuk detik yang pasti, dan inilah sebabnya pustaka tanggal meminta tanggal acuan sebelum mengonversi sebuah durasi. Perlakukan komponen Y, M, W, dan D sebagai aritmetika kalender, dan hanya H, M, dan S sebagai jumlah waktu yang tetap.

Bukan durasi: 20260424174227.0Z

String seperti 20260424174227.0Z terlihat seolah bisa termasuk keluarga yang sama, tetapi ia adalah stempel waktu, bukan durasi, dan juga bukan ISO 8601. Ini adalah GeneralizedTime, sebuah format dari ASN.1, notasi yang digunakan oleh direktori LDAP dan sertifikat X.509. Bacalah sebagai bidang dengan lebar tetap: tahun 2026, bulan 04, hari 24, kemudian 17:42:27, pecahan opsional (.0), dan Z untuk UTC. Anda menemuinya pada atribut Active Directory seperti whenCreated dan whenChanged, pada ekspor LDAP, dan di dalam sertifikat, tempat RFC 5280 mewajibkan GeneralizedTime untuk tanggal keberlakuan mulai tahun 2050 dan seterusnya. Ciri yang membedakannya dari bentuk ringkas ISO 8601 adalah T yang hilang: ISO akan menulis momen yang sama sebagai 20260424T174227Z.

String GeneralizedTime 20260424174227.0Z diuraikan bidang demi bidang menjadi 24 April 2026, 17:42:27 UTC

Menguraikan satu string tanpa membaca spesifikasi

Untuk string yang muncul sesekali, konverter durasi ISO kami menguraikan durasi P/T apa pun menjadi komponen-komponennya dan totalnya dalam detik, serta membangun kembali string dari angka yang Anda ketikkan. Ketika yang Anda miliki adalah dua waktu jam alih-alih string durasi (misalnya sebuah sif yang berjalan dari pukul 22:00 hingga 06:30), kalkulator durasi waktu memberikan waktu yang berlalu, termasuk rentang yang melewati tengah malam. Keduanya berjalan sepenuhnya di peramban Anda: tidak ada yang Anda ketikkan meninggalkan perangkat Anda. Dan untuk pembacaan cepat tanpa alat apa pun, dua kebiasaan ini mencakup sebagian besar kasus: cari T untuk mengetahui apakah M berarti bulan atau menit, dan ingat bahwa segala sesuatu di sebelah kiri T adalah aritmetika kalender, bukan angka detik yang tetap.

Alat dalam artikel ini

Pertanyaan yang sering diajukan

Apakah PT1M sama dengan P1M?

Tidak. Huruf M berubah makna tergantung pemisah T: P1M berarti satu bulan, PT1M berarti satu menit. Ini adalah kesalahan pembacaan format yang paling umum, dan beberapa bug API pernah dirilis karena hal ini. Jika ragu, cari dulu T-nya: segala sesuatu sebelum T dihitung dalam tahun, bulan, minggu, dan hari; segala sesuatu setelah T dihitung dalam jam, menit, dan detik. Durasi yang ditulis dengan benar tidak pernah memiliki satuan waktu sebelum T atau satuan tanggal sesudah T.

Bagaimana cara menulis 90 menit sebagai durasi ISO 8601?

PT90M dan PT1H30M sama-sama valid dan menggambarkan jumlah waktu yang sama. ISO 8601 tidak memaksa komponen tetap berada dalam rentang konvensionalnya, sehingga menit di atas 59 atau jam di atas 23 tetap sah. Pengurai menerima kedua ejaan tersebut; ejaan mana yang dihasilkan sebuah sistem bergantung pada apakah sistem itu menormalkan hasilnya. Jika Anda menghasilkan durasi untuk dibaca manusia, PT1H30M lebih mudah dipahami; jika Anda membandingkan durasi dalam kode, bandingkan total detiknya dan bukan stringnya, justru karena dua string yang berbeda bisa berarti hal yang sama.

Apa perbedaan antara durasi dan interval?

Durasi menyatakan berapa lama, tanpa posisi di kalender: P3D berarti tiga hari, dimulai dari mana saja. Interval ISO 8601 mengaitkan sebuah durasi dengan tanggal yang sebenarnya, ditulis dengan garis miring: 2026-07-04T00:00:00Z/P3D berarti tiga hari yang dimulai pada 4 Juli 2026, dan pasangan awal/akhir seperti 2026-07-04/2026-07-07 menyatakan rentang yang sama. Ada juga interval berulang dengan awalan R: R5/2026-07-04T00:00:00Z/P1D berarti lima pengulangan harian dari awal tersebut. Interval menyelesaikan ambiguitas satuan kalender, karena P1M yang dikaitkan dengan sebuah tanggal selalu memiliki satu panjang yang pasti.

Sumber