Tech Help
Unix Timestamp σε δευτερόλεπτα vs χιλιοστά: γιατί η ημερομηνία δείχνει 1970
Αν ένα Unix timestamp γίνει ημερομηνία κοντά στο 1970, συχνά τα δευτερόλεπτα διαβάστηκαν ως χιλιοστά. Πώς να ξεχωρίσετε τις μονάδες.
Αν ένα Unix timestamp δίνει ημερομηνία κοντά στο 1970, η τιμή συχνά ερμηνεύεται στη λάθος μονάδα.
Τα Unix timestamps συνήθως χρησιμοποιούν δευτερόλεπτα, ενώ το Date στη JavaScript συνήθως χιλιοστά του δευτερολέπτου.
Ένα σύγχρονο timestamp 10 ψηφίων είναι συχνά δευτερόλεπτα, ένα 13 ψηφίων συχνά χιλιοστά. Αν οι μονάδες δεν ταιριάζουν, ίσως χρειαστεί πολλαπλασιασμός ή διαίρεση με 1.000.
Μετατρέψατε ένα timestamp και βρεθήκατε στον Ιανουάριο του 1970. Σπάνια είναι χαλασμένο ρολόι. Ο αριθμός διαβάστηκε ως χιλιοστά ενώ ήταν αποθηκευμένος σε δευτερόλεπτα—ή το αντίστροφο.
Τι είναι το Unix timestamp;
Ένα Unix timestamp μετρά τον χρόνο από το Unix epoch: 1970-01-01 00:00:00 UTC. Συνήθως χρησιμοποιεί ακέραια δευτερόλεπτα. Η ίδια στιγμή μπορεί να αποθηκευτεί και σε χιλιοστά (δευτερόλεπτα × 1.000). Ο ίδιος ο αριθμός δεν δηλώνει τη μονάδα.
Δευτερόλεπτα vs χιλιοστά: η διαφορά ×1.000
Ένα δευτερόλεπτο ισούται με 1.000 χιλιοστά. Συγκρίνετε το 1720000000 με το 1720000000000. Αν το πρώτο είναι δευτερόλεπτα και το δεύτερο χιλιοστά, είναι η ίδια στιγμή. Διαβάστε το πρώτο ως χιλιοστά και η ημερομηνία πηδά προς το 1970.
Αυτά τα αποτελέσματα UTC υπολογίστηκαν από τους αριθμούς πάνω, δεν είναι εικασία.
| Τιμή | Πιθανή μονάδα | Ερμηνεία (UTC) |
|---|---|---|
| 1720000000 | Δευτερόλεπτα | Σύγχρονη ημερομηνία ως δευτερόλεπτα: 2024-07-03 09:46:40 UTC |
| 1720000000000 | Χιλιοστά δευτερολέπτου | Η ίδια στιγμή ως χιλιοστά: 2024-07-03 09:46:40 UTC |
| 1720000000 ως χιλιοστά | Λάθος μονάδα | Ημερομηνία κοντά στο 1970: 1970-01-20 21:46:40 UTC |
Γιατί το timestamp μου δείχνει 1970;
Αν τιμή σε δευτερόλεπτα αντιμετωπιστεί ως χιλιοστά, ο αριθμός είναι 1.000 φορές μικρότερος. Η JavaScript μετρά τότε μόνο ένα σύντομο διάστημα μετά το Unix epoch, και η ημερομηνία μένει στο 1970:
const seconds = 1720000000;
new Date(seconds);
// 1970-01-20 21:46:40 UTC
new Date(seconds * 1000);
// 2024-07-03 09:46:40 UTC
Εκείνη η ημερομηνία του 1970 είναι το epoch συν περίπου δύο εβδομάδες. Πολλαπλασιάστε τα δευτερόλεπτα με 1.000 πριν τα δώσετε στο Date.
- ΔΕΥΤΕΡΟΛΕΠΤΑ
- 1720000000
- ΧΙΛΙΟΣΤΑ
- 1720000000000
- Τιμή σε δευτερόλεπτα
- Εσφαλμένα ως χιλιοστά
- Ημερομηνία κοντά στο 1970
Αν το αποτέλεσμα είναι κοντά στο 1970, ελέγξτε τη μονάδα του timestamp πριν ψάξετε τη ζώνη ώρας.
Τα 10 ψηφία είναι δευτερόλεπτα και τα 13 χιλιοστά;
Για σύγχρονες ημερομηνίες, τα 10 ψηφία είναι συχνά δευτερόλεπτα και τα 13 συχνά χιλιοστά. Είναι γρήγορη ένδειξη, όχι κανόνας επικύρωσης. Το πλήθος ψηφίων αλλάζει με το χρονικό εύρος και ορισμένα API αποθηκεύουν μικροδευτερόλεπτα ή νανοδευτερόλεπτα. Επιβεβαιώστε τη μονάδα από την τεκμηρίωση ή από ημερομηνία που βγάζει νόημα.
Γιατί συμβαίνει τόσο συχνά στη JavaScript
Στη JavaScript μια αριθμητική τιμή Date είναι χιλιοστά από το epoch. Πολλά backends, βάσεις και εργαλεία Unix εξακολουθούν να αποθηκεύουν δευτερόλεπτα. Να περνάτε τιμή σε δευτερόλεπτα κατευθείαν στο Date είναι συχνό σφάλμα:
const unixSeconds = 1720000000;
const wrong = new Date(unixSeconds);
const correct = new Date(unixSeconds * 1000);
Το wrong είναι κοντά στο 1970 (1970-01-20 21:46:40 UTC). Το correct είναι η σύγχρονη στιγμή (2024-07-03 09:46:40 UTC).
Άλλα συστήματα χρησιμοποιούν άλλες μονάδες
Άλλες γλώσσες, API και βάσεις μπορεί να χρησιμοποιούν δευτερόλεπτα ή χιλιοστά. Ορισμένα αποθηκεύουν μικροδευτερόλεπτα ή νανοδευτερόλεπτα. Μην υποθέτετε ότι μια γλώσσα χρησιμοποιεί πάντα μία μονάδα—δείτε την τεκμηρίωση. Αν ο αριθμός είναι σε JSON, το Μορφοποίηση και σύγκριση JSON κάνει το πεδίο αναγνώσιμο· τη μονάδα πάλι δεν τη λέει.
Πώς καταλαβαίνω ποια μονάδα χρησιμοποιεί το timestamp μου;
Κάντε αυτούς τους ελέγχους με τη σειρά. Το πλήθος ψηφίων από μόνο του δεν αρκεί.
- Δείτε την τεκμηρίωση του API ή της βάσης.
- Κοιτάξτε τον κατά προσέγγιση αριθμό ψηφίων.
- Συγκρίνετε την τιμή με ένα εύλογο σύγχρονο timestamp.
- Δοκιμάστε την τιμή ως δευτερόλεπτα και ως χιλιοστά.
- Ελέγξτε αν η ημερομηνία που προκύπτει βγάζει νόημα.
Αν μία ερμηνεία πέφτει στο 1970 και η άλλη σε ημερομηνία που αναγνωρίζετε, η αιτία είναι η αναντιστοιχία μονάδας.
Συχνά λάθη με Unix timestamp
- Δευτερόλεπτα ως χιλιοστά. Η ημερομηνία καταρρέει προς το 1970, όπως στο παράδειγμα.
- Χιλιοστά ως δευτερόλεπτα. Η ημερομηνία πηδά μακριά στο μέλλον, ή η μετατροπή αποτυγχάνει.
- Πολλαπλασιασμός με 1.000 δύο φορές. Τιμή που ήδη ήταν χιλιοστά γίνεται τεράστια και η ημερομηνία προχωρά αιώνες.
- Διαίρεση με 1.000 δύο φορές. Τιμή σε δευτερόλεπτα συρρικνώνεται ξανά, πάλι κοντά στο 1970.
- Να κατηγορείτε τη ζώνη ώρας. Η ζώνη μπορεί να μετατοπίσει ώρες ή την ημερομηνία του ημερολογίου. Δεν μεταφέρει σύγχρονο timestamp στο 1970.
- Να αντιμετωπίζετε μορφοποιημένη ημερομηνία ως Unix timestamp. Τιμή όπως 2024-07-03T09:46:40Z δεν είναι αριθμός epoch. Αναλύστε την ως ημερομηνία, όχι ως δευτερόλεπτα.
Η ζώνη ώρας προκαλεί το πρόβλημα του 1970;
Συνήθως όχι. Η ζώνη μπορεί να αλλάξει το εμφανιζόμενο ρολόι και, κοντά στα μεσάνυχτα, την ημερομηνία. Δεν μετατρέπει σύγχρονο Unix timestamp σε 1970. Αν το αποτέλεσμα είναι 1970, ελέγξτε πρώτα δευτερόλεπτα έναντι χιλιοστών.
Μετατροπή και έλεγχος Unix timestamp
Το NEXNARA Μετατροπέας ημερομηνίας και ώρας μπορεί να μετατρέψει Unix timestamp στο πρόγραμμα περιήγησης.
Επικολλήστε δευτερόλεπτα ή χιλιοστά Unix, χρησιμοποιήστε το τρέχον timestamp, δείτε UTC και τοπική ώρα, μετατρέψτε ζώνες και μορφοποιήστε ημερομηνία. Η αυτόματη αναγνώριση συχνά θεωρεί 10 ψηφία δευτερόλεπτα και 13 χιλιοστά· μπορείτε ακόμη να επιλέξετε μονάδα.
Η ίδια η μετατροπή γίνεται στο πρόγραμμα περιήγησης. Το εργαλείο δεν στέλνει ημερομηνίες ή timestamps σε διακομιστή NEXNARA. Οι διαφημίσεις και άλλες λειτουργίες του ιστότοπου χρησιμοποιούν ακόμη το δίκτυο· αυτό είναι ξεχωριστό από τη μετατροπή.
Θέλετε να ελέγξετε ένα Unix timestamp; Ανοίξτε το Μετατροπέας ημερομηνίας και ώρας και συγκρίνετε δευτερόλεπτα με χιλιοστά.
FAQ
Γιατί το Unix timestamp μου δείχνει 1970;
Συχνά είναι δευτερόλεπτα που διαβάστηκαν ως χιλιοστά. Η JavaScript επεξεργάζεται πολύ μικρότερο αριθμό, οπότε η ημερομηνία πέφτει λίγο μετά το 1970-01-01 00:00:00 UTC. Πολλαπλασιάστε τα δευτερόλεπτα με 1.000 και μετατρέψτε ξανά.
Τα Unix timestamps είναι δευτερόλεπτα ή χιλιοστά;
Συνήθως δευτερόλεπτα. Πολλά web API και το Date στη JavaScript χρησιμοποιούν χιλιοστά. Ελέγχετε πάντα τι τεκμηριώνει εκείνο το σύστημα. Ορισμένα χρησιμοποιούν μικροδευτερόλεπτα ή νανοδευτερόλεπτα.
Πώς μετατρέπω δευτερόλεπτα σε χιλιοστά;
Πολλαπλασιάστε με 1.000. 1720000000 δευτερόλεπτα είναι 1720000000000 χιλιοστά. Αντίστροφα, διαιρέστε με 1.000.
Γιατί το Date στη JavaScript χρησιμοποιεί χιλιοστά;
Το αριθμητικό timestamp του Date στη JavaScript ορίζεται ως χιλιοστά από το Unix epoch. Γι’ αυτό το new Date(unixSeconds) είναι λάθος όταν το unixSeconds είναι δευτερόλεπτα Unix.
Ένα timestamp 10 ψηφίων είναι πάντα δευτερόλεπτα;
Όχι. Για σύγχρονες ημερομηνίες συχνά ναι, και τα 13 ψηφία συχνά είναι χιλιοστά. Το πλήθος ψηφίων είναι ένδειξη, όχι κανόνας. Επιβεβαιώστε με τεκμηρίωση ή ημερομηνία που βγάζει νόημα.
Περιέχει ένα Unix timestamp ζώνη ώρας;
Όχι. Ένα Unix timestamp είναι μια στιγμή μετρημένη από το 1970-01-01 00:00:00 UTC. Οι ζώνες επηρεάζουν την εμφάνιση, όχι τον ίδιο τον αριθμό.