Άρθρο
Διάρκειες ISO 8601: τι σημαίνει το P1DT2H
Μια απάντηση του API του YouTube αναφέρει ότι ένα βίντεο διαρκεί PT4M13S. Μια πρόσκληση ημερολογίου φέρει την τιμή P15DT5H0M20S. Ένας διακομιστής καταλόγου σφραγίζει έναν λογαριασμό με χρονική σήμανση 20260424174227.0Z, που φαίνεται συγγενική αλλά στην πραγματικότητα είναι κάτι εντελώς διαφορετικό. Αυτές οι συμπαγείς συμβολοσειρές ακολουθούν κανόνες που αξίζει να γνωρίζετε, γιατί μια λανθασμένη ανάγνωση μετατρέπει τα λεπτά σε μήνες. Αυτή είναι μια περιήγηση στη μορφή διάρκειας ISO 8601: τι σημαίνουν τα γράμματα, πού εμφανίζεται η μορφή αυτή, και η μία μεγάλη λεπτότητά της, δηλαδή ότι μια διάρκεια γραμμένη με αυτόν τον τρόπο δεν είναι πάντα μια σταθερή ποσότητα χρόνου.
P, T, και τι σημαίνουν τα γράμματα
Μια διάρκεια ISO 8601 ξεκινά με P (period). Ακολουθούν τα στοιχεία ημερομηνίας, το καθένα ένας αριθμός ακολουθούμενος από το γράμμα μονάδας του: Y για έτη, M για μήνες, W για εβδομάδες, D για ημέρες. Το T διαχωρίζει το τμήμα ημερομηνίας από το τμήμα ώρας: H για ώρες, M για λεπτά, S για δευτερόλεπτα. Κάθε στοιχείο είναι προαιρετικό· γράφετε μόνο ό,τι χρειάζεστε. Το PT15M είναι 15 λεπτά, το P1DT2H είναι μία ημέρα και δύο ώρες, το P3W είναι τρεις εβδομάδες. Το T δεν είναι διακόσμηση: το M σημαίνει μήνες πριν από αυτό και λεπτά μετά, οπότε το P1M είναι ένας μήνας ενώ το PT1M είναι ένα λεπτό. Το τελευταίο στοιχείο που υπάρχει μπορεί να φέρει δεκαδικό κλάσμα, όπως στο PT0.5S για μισό δευτερόλεπτο. Και οι μονάδες δεν μεταφέρονται αυτόματα η μία στην άλλη: το PT90M είναι ένας απολύτως έγκυρος τρόπος να γράψετε μιάμιση ώρα.

Πού συναντάτε πραγματικά αυτή τη μορφή
Αυτή η σύνταξη υπάρχει σιωπηλά παντού. Το YouTube Data API αναφέρει το μήκος κάθε βίντεο ως διάρκεια ISO 8601 (PT4M13S). Η HTML δέχεται διάρκειες στο χαρακτηριστικό datetime του στοιχείου time. Οι προσκλήσεις ημερολογίου το χρησιμοποιούν επίσης: το πρότυπο iCalendar (RFC 5545) γράφει τη διάρκεια ενός συμβάντος όπως PT1H0M0S, αν και αφαιρεί τα έτη και τους μήνες από τη γραμματική του. Το xs:duration στο XML Schema καλύπτει την πλήρη μορφή και επιτρέπει ακόμη και ένα αρνητικό πρόσημο στην αρχή για αρνητικές διάρκειες. Οι βασικές βιβλιοθήκες το αναλύουν απευθείας: το java.time διαβάζει συμβολοσειρές P και T με τα Period.parse και Duration.parse, και ο ίδιος διαχωρισμός υπάρχει σε πολλές άλλες γλώσσες. Αν παράγετε προγράμματα, ροές ή API αναγνώσιμα από μηχανές, αυτή η μορφή είναι η κοινή γλώσσα για το «πόσο διαρκεί».
Γιατί το P1M δεν είναι σταθερός αριθμός δευτερολέπτων
Το PT15M ισοδυναμεί πάντα με 900 δευτερόλεπτα. Το P1M όχι: ένας μήνας διαρκεί 28, 29, 30 ή 31 ημέρες ανάλογα με το πού ξεκινά, οπότε το P1M γίνεται συγκεκριμένο μόνο αφού το συνδέσετε με μια ημερομηνία. Ακόμη και το P1D δεν είναι εγγυημένο ότι ισοδυναμεί με 24 ώρες. Στην Ευρωπαϊκή Ένωση, τα ρολόγια πάνε μπροστά την Κυριακή 29 Μαρτίου 2026, οπότε εκείνη η ημερολογιακή ημέρα διαρκεί μόνο 23 ώρες: η προσθήκη P1D (μιας ημερολογιακής ημέρας) και η προσθήκη PT24H (ακριβώς 24 ωρών) στο ίδιο Σαββατόβραδο καταλήγουν σε διαφορετικές χρονικές στιγμές. Γι' αυτό το java.time έχει δύο τύπους, το Period για ημερολογιακές μονάδες και το Duration για ακριβή δευτερόλεπτα, και γι' αυτό οι βιβλιοθήκες ημερομηνιών ζητούν μια ημερομηνία αναφοράς πριν μετατρέψουν μια διάρκεια. Αντιμετωπίστε τα στοιχεία Y, M, W και D ως ημερολογιακό υπολογισμό, και μόνο τα H, M και S ως σταθερές ποσότητες χρόνου.
Δεν είναι διάρκεια: 20260424174227.0Z
Μια συμβολοσειρά όπως η 20260424174227.0Z μπορεί να φαίνεται σαν να ανήκει στην ίδια οικογένεια, αλλά στην πραγματικότητα είναι μια χρονική σήμανση, όχι μια διάρκεια, και ούτε καν ISO 8601. Είναι GeneralizedTime, μια μορφή από το ASN.1, ο συμβολισμός που χρησιμοποιούν οι κατάλογοι LDAP και τα πιστοποιητικά X.509. Διαβάστε την ως πεδία σταθερού πλάτους: έτος 2026, μήνας 04, ημέρα 24, μετά 17:42:27, ένα προαιρετικό δεκαδικό μέρος (.0), και Z για UTC. Τη συναντάτε σε χαρακτηριστικά του Active Directory όπως τα whenCreated και whenChanged, σε εξαγωγές LDAP, και μέσα σε πιστοποιητικά, όπου το RFC 5280 επιβάλλει το GeneralizedTime για ημερομηνίες ισχύος από το έτος 2050 και μετά. Το στοιχείο που το ξεχωρίζει από τη συμπαγή μορφή του ISO 8601 είναι η απουσία του T: το ISO θα έγραφε την ίδια στιγμή ως 20260424T174227Z.

Αποκωδικοποίηση μιας διάρκειας χωρίς να διαβάσετε την προδιαγραφή
Για μία μεμονωμένη συμβολοσειρά, ο μετατροπέας διάρκειας ISO 8601 μας αναλύει οποιαδήποτε διάρκεια P/T στα στοιχεία της και στο σύνολό της σε δευτερόλεπτα, και ξαναχτίζει τη συμβολοσειρά από τους αριθμούς που πληκτρολογείτε. Όταν αυτό που έχετε είναι δύο ώρες ρολογιού αντί για μια συμβολοσειρά διάρκειας (μια βάρδια, ας πούμε, από τις 22:00 έως τις 06:30), η αριθμομηχανή διάρκειας χρόνου δίνει τον χρόνο που πέρασε, συμπεριλαμβανομένων των διαστημάτων που εκτείνονται πέρα από τα μεσάνυχτα. Και τα δύο εκτελούνται εξ ολοκλήρου στο πρόγραμμα περιήγησής σας: ό,τι πληκτρολογείτε δεν φεύγει ποτέ από τη συσκευή σας. Και για γρήγορη ανάγνωση χωρίς κανένα εργαλείο, δύο αντανακλαστικά καλύπτουν τις περισσότερες περιπτώσεις: βρείτε το T για να μάθετε αν το M σημαίνει μήνες ή λεπτά, και θυμηθείτε ότι οτιδήποτε βρίσκεται αριστερά του T είναι ημερολογιακός υπολογισμός, όχι σταθερός αριθμός δευτερολέπτων.
Εργαλεία αυτού του άρθρου
- Μετατροπέας διάρκειας ISO 8601Αναλύστε και μετατρέψτε διάρκειες ISO 8601 (P1Y2M…) σε συστατικά και δευτερόλεπτα. Στο πρόγραμμα περιήγησης.
- Αριθμομηχανή διάρκειας χρόνουΥπολογίστε τη διάρκεια μεταξύ δύο ωρών της ημέρας, συμπεριλαμβανομένων περιόδων διανυκτέρευσης. Στο πρόγραμμα περιήγησης.
- Μετατροπέας μορφής ημερομηνίαςΜετατρέψτε μια ημερομηνία σε μορφές ISO, US, ευρωπαϊκή, με τελείες, συμπαγή και Unix. Στο πρόγραμμα περιήγησης.
Συχνές ερωτήσεις
Είναι το PT1M το ίδιο με το P1M;
Όχι. Το γράμμα M αλλάζει σημασία στις δύο πλευρές του διαχωριστικού T: το P1M είναι ένας μήνας, το PT1M είναι ένα λεπτό. Αυτή είναι η πιο συνηθισμένη λανθασμένη ανάγνωση αυτής της μορφής, και έχουν κυκλοφορήσει σφάλματα API εξαιτίας της. Αν έχετε αμφιβολία, ψάξτε πρώτα για το T: όλα πριν από αυτό μετρούν σε έτη, μήνες, εβδομάδες και ημέρες· όλα μετά από αυτό μετρούν σε ώρες, λεπτά και δευτερόλεπτα. Μια σωστά διαμορφωμένη διάρκεια δεν έχει ποτέ μονάδες ώρας πριν από το T ούτε μονάδες ημερομηνίας μετά από αυτό.
Πώς γράφω 90 λεπτά ως διάρκεια ISO 8601;
Τα PT90M και PT1H30M είναι και τα δύο έγκυρα και περιγράφουν την ίδια ποσότητα χρόνου. Το ISO 8601 δεν αναγκάζει τα στοιχεία να παραμένουν στα συμβατικά τους εύρη, οπότε λεπτά πάνω από 59 ή ώρες πάνω από 23 είναι εντάξει. Οι αναλυτές δέχονται και τις δύο γραφές· ποια από τις δύο εκπέμπει ένα σύστημα εξαρτάται από το αν κανονικοποιεί την τιμή. Αν παράγετε διάρκειες για ανθρώπινη ανάγνωση, το PT1H30M είναι πιο φιλικό· αν συγκρίνετε διάρκειες σε κώδικα, συγκρίνετε τα συνολικά δευτερόλεπτά τους αντί για τις ίδιες τις συμβολοσειρές, ακριβώς επειδή δύο διαφορετικές συμβολοσειρές μπορεί να σημαίνουν το ίδιο πράγμα.
Ποια είναι η διαφορά ανάμεσα σε μια διάρκεια και ένα διάστημα;
Μια διάρκεια δηλώνει πόσο διαρκεί, χωρίς θέση στο ημερολόγιο: το P3D είναι τρεις ημέρες, ξεκινώντας από οπουδήποτε. Ένα διάστημα ISO 8601 συνδέει μια διάρκεια με πραγματικές ημερομηνίες, γραμμένο με πλάγια κάθετο: το 2026-07-04T00:00:00Z/P3D σημαίνει τις τρεις ημέρες που ξεκινούν στις 4 Ιουλίου 2026, και ένα ζεύγος αρχή/τέλος όπως το 2026-07-04/2026-07-07 εκφράζει το ίδιο διάστημα. Υπάρχουν επίσης επαναλαμβανόμενα διαστήματα με πρόθεμα R: το R5/2026-07-04T00:00:00Z/P1D σημαίνει πέντε καθημερινές επαναλήψεις από εκείνο το σημείο εκκίνησης. Τα διαστήματα λύνουν την ασάφεια των ημερολογιακών μονάδων, αφού το P1M όταν συνδέεται με μια ημερομηνία έχει πάντα ένα καθορισμένο μήκος.