Makale
ISO 8601 süreleri: P1DT2H ne anlama gelir
Bir YouTube Data API yanıtı bir videonun PT4M13S sürdüğünü söyler. Bir takvim daveti P15DT5H0M20S taşır. Bir dizin sunucusu bir hesabı 20260424174227.0Z ile damgalar; bu ilişkili görünür ama tamamen başka bir şeydir. Bu derli toplu dizeler bilinmesi gereken kurallara uyar, çünkü yanlış okumak dakikaları aya çevirir. Bu, ISO 8601 süre biçiminde bir gezinti: harflerin ne anlama geldiği, biçimin nerede karşımıza çıktığı ve tek büyük inceliği, yani bu şekilde yazılan bir sürenin her zaman sabit bir zaman miktarı olmadığı.
P, T ve harflerin anlamı
Bir ISO 8601 süresi P (period) ile başlar. Ardından tarih bileşenleri gelir; her biri bir sayı ve onu izleyen birim harfidir: Y yıl, M ay, W hafta, D gün. Bir T, tarih kısmını zaman kısmından ayırır: H saat, M dakika, S saniye. Her bileşen isteğe bağlıdır; yalnızca gereken yazılır. PT15M 15 dakikadır, P1DT2H bir gün iki saattir, P3W üç haftadır. T bir süsleme değildir: ondan önce M ay, ondan sonra M dakika anlamına gelir, dolayısıyla P1M bir ay iken PT1M bir dakikadır. Bulunan son bileşen ondalık bir kesir taşıyabilir, örneğin yarım saniye için PT0.5S. Ve birimler kendiliğinden bir üst birime taşmaz: PT90M, bir buçuk saati yazmanın tamamen geçerli bir yoludur.

Bu biçimle gerçekte nerede karşılaşırsınız
Bu sözdizimi sessizce her yerdedir. YouTube Data API her video uzunluğunu bir ISO 8601 süresi olarak bildirir (PT4M13S). HTML, time elementinin datetime özniteliğinde süreleri kabul eder. Takvim davetleri bunu kullanır: iCalendar standardı (RFC 5545) etkinlik uzunluklarını PT1H0M0S gibi yazar, ancak dilbilgisinden yıl ve ayı çıkarır. XML Schema'nın xs:duration'ı tam formu kapsar ve negatif süreler için başta bir eksi işaretine bile izin verir. Standart kütüphaneler onu doğrudan ayrıştırır: java.time, P ve T dizelerini Period.parse ve Duration.parse ile okur, aynı ayrım birçok başka dilde de vardır. Makine tarafından okunabilir programlar, akışlar veya API'ler üretiyorsanız, bu biçim "ne kadar sürer" sorusunun ortak dilidir.
P1M neden sabit bir saniye sayısı değildir
PT15M her zaman 900 saniyedir. P1M öyle değildir: bir ay, nereden başladığına bağlı olarak 28, 29, 30 veya 31 gün sürer, dolayısıyla P1M ancak bir tarihe bağlandığında somutlaşır. P1D bile 24 saat olması garanti edilmez. Avrupa Birliği'nde saatler 29 Mart 2026 Pazar günü ileri alınır, bu yüzden o takvim günü 23 saat sürer: aynı Cumartesi akşamına P1D (bir takvim günü) eklemek ile PT24H (tam olarak 24 saat) eklemek farklı anlara ulaşır. java.time'ın takvim birimleri için Period ve kesin saniyeler için Duration olmak üzere iki türü olmasının nedeni budur, tarih kütüphanelerinin bir süreyi dönüştürmeden önce bir referans tarih istemesinin nedeni de budur. Y, M, W ve D bileşenlerini takvim aritmetiği olarak, yalnızca H, M ve S'yi sabit zaman miktarları olarak ele alın.
Bu bir süre değil: 20260424174227.0Z
20260424174227.0Z gibi bir dize aynı aileye ait gibi görünebilir, ama bu bir zaman damgasıdır, süre değildir, ve ISO 8601 de değildir. Bu, ASN.1'den gelen bir biçim olan GeneralizedTime'dır; LDAP dizinlerinin ve X.509 sertifikalarının kullandığı gösterimdir. Sabit genişlikli alanlar olarak okunur: yıl 2026, ay 04, gün 24, ardından 17:42:27, isteğe bağlı bir kesir (.0) ve UTC için Z. Bunu Active Directory'nin whenCreated ve whenChanged gibi özniteliklerinde, LDAP dışa aktarımlarında ve sertifikalar içinde görürsünüz; RFC 5280, 2050 yılından itibaren geçerlilik tarihleri için GeneralizedTime'ı zorunlu kılar. Onu ISO 8601'in derli toplu biçiminden ayıran işaret, eksik T'dir: ISO aynı anı 20260424T174227Z olarak yazardı.

Standardı okumadan birini çözmek
Tek seferlik bir dize için ISO süre dönüştürücümüz herhangi bir P/T süresini bileşenlerine ve toplam saniyesine ayrıştırır, ve yazdığınız sayılardan dizeyi yeniden oluşturur. Elinizde bir süre dizesi yerine iki saat varsa (örneğin 22:00'den 06:30'a kadar süren bir vardiya), süre hesaplayıcı geçen süreyi verir, gece yarısını aşan aralıklar dahil. İkisi de tamamen tarayıcınızda çalışır: yazdığınız hiçbir şey cihazınızdan çıkmaz. Ve herhangi bir araç olmadan hızlı okuma için, çoğu durumu kapsayan iki refleks vardır: bir M'nin ay mı dakika mı anlamına geldiğini bilmek için T'yi arayın, ve T'nin solundaki her şeyin sabit bir saniye sayısı değil, takvim aritmetiği olduğunu unutmayın.
Bu makaledeki araçlar
- ISO 8601 süre dönüştürücüISO 8601 sürelerini (P1Y2M…) bileşenlere ve saniyelere ayrıştırın ve dönüştürün. Tarayıcı içi.
- Süre hesaplayıcıGece yarısını kapsayan aralıklar dahil, günün iki zamanı arasındaki süreyi hesaplayın. Tarayıcı içi.
- Tarih biçimi dönüştürücüBir tarihi ISO, ABD, Avrupa, noktalı, kompakt ve Unix biçimlerine dönüştürün. Tarayıcı içi.
Sıkça sorulan sorular
PT1M, P1M ile aynı mı?
Hayır. M harfi T ayracına göre anlam değiştirir: P1M bir aydır, PT1M bir dakikadır. Bu, biçimin en yaygın yanlış okunuşudur, ve bazı API hataları tam olarak bu yüzden yayınlanmıştır. Şüpheye düştüğünüzde önce T'yi arayın: ondan öncesi yıl, ay, hafta ve gün olarak sayılır; ondan sonrası saat, dakika ve saniye olarak sayılır. İyi biçimlendirilmiş bir sürede T'den önce zaman birimi, T'den sonra da tarih birimi asla bulunmaz.
90 dakika ISO 8601 süresi olarak nasıl yazılır?
PT90M ve PT1H30M'in ikisi de geçerlidir ve aynı zaman miktarını tanımlar. ISO 8601, bileşenleri geleneksel aralıklarında kalmaya zorlamaz, dolayısıyla 59'un üzerindeki dakikalar veya 23'ün üzerindeki saatler sorun değildir. Ayrıştırıcılar her iki yazımı da kabul eder; bir sistemin hangisini ürettiği, normalleştirip normalleştirmediğine bağlıdır. İnsanların okuması için süre üretiyorsanız PT1H30M daha okunaklıdır; kodda süreleri karşılaştırıyorsanız, dizeleri değil toplam saniyelerini karşılaştırın, çünkü tam da bu yüzden iki farklı dize aynı şeyi ifade edebilir.
Süre ile aralık arasındaki fark nedir?
Bir süre, takvimde bir konum belirtmeden ne kadar sürdüğünü söyler: P3D, herhangi bir yerden başlayan üç gündür. Bir ISO 8601 aralığı, bir süreyi gerçek tarihlere sabitler ve bir eğik çizgiyle yazılır: 2026-07-04T00:00:00Z/P3D, 4 Temmuz 2026'da başlayan üç günü ifade eder, ve 2026-07-04/2026-07-07 gibi bir başlangıç/bitiş çifti de aynı aralığı ifade eder. R önekiyle tekrarlanan aralıklar da vardır: R5/2026-07-04T00:00:00Z/P1D, o başlangıçtan itibaren beş günlük tekrarı ifade eder. Aralıklar, takvim birimlerinin belirsizliğini çözer, çünkü bir tarihe bağlanan P1M her zaman kesin bir uzunluğa sahiptir.