Μετατροπέας Unix timestamp σε ημερομηνία

Μετατρέψτε ένα Unix timestamp σε ευανάγνωστη ημερομηνία και ώρα — ή οποιαδήποτε ημερομηνία πίσω σε Unix timestamp. Υποστηρίζει δευτερόλεπτα και χιλιοστά του δευτερολέπτου.

Μοιράσου αυτό το εργαλείο

Ενσωμάτωσε στο site σου

Τι είναι ένα Unix timestamp;

Ένα Unix timestamp, γνωστό και ως Unix time ή POSIX time, είναι ο αριθμός των δευτερολέπτων που έχουν παρέλθει από τις 1970-01-01 00:00:00 UTC, γνωστό ως Unix epoch. Είναι ένα ευρέως χρησιμοποιούμενο πρότυπο στην πληροφορική καθώς αναπαριστά ένα σημείο στο χρόνο ως ένα μόνο ακέραιο, κάτι που κάνει την αποθήκευση, σύγκριση και αριθμητικές πράξεις απλές.

Η JavaScript λειτουργεί εσωτερικά σε χιλιοστά του δευτερολέπτου, επομένως Date.now() επιστρέφει το Unix timestamp πολλαπλασιασμένο επί 1000. Πολλά APIs, βάσεις δεδομένων και backend συστήματα χρησιμοποιούν δευτερόλεπτα. Αυτό το εργαλείο αποδέχεται και τις δύο μορφές και αναγνωρίζει αυτόματα δευτερόλεπτα ή χιλιοστά βάσει του μεγέθους του αριθμού που εισάγετε.

Σημαντικά Unix timestamps

TimestampΗμερομηνία (UTC)Σημείωση
01970-01-01 00:00:00Unix epoch
1,000,000,0002001-09-09 01:46:401 δισεκατομμύριο δευτερόλεπτα
2,000,000,0002033-05-18 03:33:202 δισεκατομμύρια δευτερόλεπτα
2,147,483,6472038-01-19 03:14:07Πρόβλημα 2038 (μέγιστο 32-bit)

Γιατί 1970;

Το Unix epoch της 1ης Ιανουαρίου 1970 επιλέχθηκε εν μέρει κατά σύμβαση και εν μέρει λόγω πρακτικών περιορισμών. Το Unix αναπτύχθηκε στα τέλη του 1960 και στις αρχές του 1970 στα Bell Labs. Οι προγραμματιστές χρειάζονταν ένα πρόσφατο, στρογγυλό ημερομηνία έναρξης για την αναπαράστασή τους. Η 1η Ιανουαρίου 1970 ήταν αρκετά πρόσφατη για να είναι πρακτική και δεν είχε καμία ειδική τεχνική σημασία — ήταν απλώς ένα βολικό σημείο αναφοράς.

Εναλλακτικές ημερομηνίες epoch υπάρχουν σε άλλα συστήματα: το Windows FILETIME epoch είναι 1η Ιανουαρίου 1601· η ώρα GPS ξεκίνησε στις 6 Ιανουαρίου 1980· το NTP epoch είναι 1η Ιανουαρίου 1900. Κατά τη μετατροπή μεταξύ συστημάτων, η γνώση του epoch κάθε συστήματος είναι απαραίτητη.

Δευτερόλεπτα έναντι χιλιοστών

Το αρχικό Unix timestamp είναι σε δευτερόλεπτα. Τα περισσότερα backend συστήματα και γλώσσες (Unix shell, time.time() της Python, time() του PHP, τις περισσότερες βάσεις δεδομένων) χρησιμοποιούν δευτερόλεπτα. Τα Date.now() και new Date().getTime() της JavaScript επιστρέφουν χιλιοστά. Αυτή η ασυμφωνία είναι μια συνηθισμένη πηγή σφαλμάτων όταν JavaScript frontends επικοινωνούν με backend APIs.

Ένα Unix timestamp σε δευτερόλεπτα είναι επί του παρόντος ένας 10ψήφιος αριθμός (περίπου 1.700.000.000 ως το 2023). Ένα timestamp σε χιλιοστά είναι ένας 13ψήφιος αριθμός. Η αριθμομηχανή ανιχνεύει ποια μορφή έχετε εισάγει βάσει του αριθμού των ψηφίων και μετατρέπει ανάλογα.

Το πρόβλημα του 2038

Τα συστήματα που αποθηκεύουν Unix timestamps ως ένα υπογεγραμμένο 32-bit ακέραιο μπορούν να αναπαραστήσουν μόνο ημερομηνίες έως 2,147,483,647 δευτερόλεπτα μετά το epoch — το οποίο είναι 03:14:07 UTC στις 19 Ιανουαρίου 2038. Μετά από εκείνο το σημείο, ένα 32-bit υπογεγραμμένο ακέραιο υπερχειλίζει σε έναν μεγάλο αρνητικό αριθμό, αναπαριστώντας μια ημερομηνία το 1901.

Αυτό μερικές φορές ονομάζεται το πρόβλημα "Y2K38" ή το Unix Millennium Bug. Τα σύγχρονα συστήματα 64-bit δεν επηρεάζονται, καθώς ένα υπογεγραμμένο 64-bit ακέραιο μπορεί να αναπαραστήσει timestamps για περίπου 292 δισεκατομμύρια χρόνια. Ωστόσο, τα ενσωματωμένα συστήματα, οι παλιές βάσεις δεδομένων και το παλαιότερο 32-bit λογισμικό ενδέχεται να παραμένουν ευάλωτα. Πολλές βιομηχανίες — συμπεριλαμβανομένων των τηλεπικοινωνιών, τραπεζών και συστημάτων βιομηχανικού ελέγχου — έχουν ενεργές προσπάθειες μετάβασης για να αντιμετωπίσουν αυτό.

Πώς να λάβετε το τρέχον Unix timestamp

Γλώσσα / περιβάλλονΕντολή
JavaScriptMath.floor(Date.now() / 1000)
Pythonimport time; int(time.time())
PHPtime()
Bashdate +%s
SQL (PostgreSQL)EXTRACT(EPOCH FROM NOW())::int
SQL (MySQL)UNIX_TIMESTAMP()
Gotime.Now().Unix()
RustSystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs()

Πρακτικές χρήσεις

Ανάπτυξη API: Τα REST APIs συνήθως χρησιμοποιούν Unix timestamps για τα πεδία created_at, updated_at και token expiry. Ένα timestamp είναι ανεξάρτητο της ζώνης ώρας και σαφές — σε αντίθεση με τις μορφοποιημένες συμβολοσειρές ημερομηνίας, οι οποίες εξαρτώνται από τις συμβάσεις τοπικής και μορφοποίησης.

Expiry token: Τα JWT (JSON Web Tokens) χρησιμοποιούν Unix timestamps για τις αξιώσεις exp (expiry) και iat (issued at). Ένα token λήγει όταν το τρέχον timestamp υπερβαίνει την τιμή exp. Ο υπολογισμός χρόνων expiry — "αυτό το token θα πρέπει να λήξει σε 24 ώρες" — απαιτεί προσθήκη 86.400 δευτερολέπτων στο τρέχον timestamp.

Cache TTL: Η λήξη cache συχνά ορίζεται ως Unix timestamp ή ως αριθμός δευτερολέπτων από τώρα. Η εντόπιση προβλημάτων cache συχνά απαιτεί τη μετατροπή ενός αποθηκευμένου timestamp λήξης σε μια ανάγνωση ημερομηνία.

Ανάλυση αρχείων καταγραφής: Τα server logs συχνά περιλαμβάνουν Unix timestamps. Η μετατροπή τους σε αναγνώσιμες ημερομηνίες είναι το πρώτο βήμα στη συσχέτιση καταχωρήσεων αρχείου καταγραφής με γεγονότα του πραγματικού κόσμου.

Αποθήκευση σε βάση δεδομένων: Η αποθήκευση timestamps ως ακέραιοι αριθμοί αντί για μορφοποιημένες συμβολοσειρές αποφεύγει σφάλματα μετατροπής ζώνης ώρας και απλοποιεί την ταξινόμηση, ερωτήματα εύρους και αριθμητικές πράξεις. Ένα ερώτημα για "όλες τις εγγραφές από τις τελευταίες 7 ημέρες" γίνεται WHERE created_at > (NOW_UNIX - 604800).

Σχετικά άρθρα