Γιατί η Unix έχει τη δική της έννοια του χρόνου; Ποια είναι η εποχή και ποιο είναι το πρόβλημα Y2038;
Η ώρα Unix είναι ένας τρόπος αναπαράστασης μιας συγκεκριμένης ημερομηνίας και ώρας, που χρησιμοποιείται από Linux, macOS και πολλά άλλα διαλειτουργικά συστήματα. Είναι τόσο διαδεδομένο, που πιθανότατα το χρησιμοποιείτε χωρίς να το γνωρίζετε. Μόλις καταλάβετε το χρόνο Unix, θα το εντοπίσετε σε πολλά περιβάλλοντα. Διάφορα εργαλεία μπορούν να σας βοηθήσουν να εργαστείτε με το Unix time.
Ποιος είναι ο σκοπός του Unix Time;
Η ώρα Unix είναι μια μέτρηση των συνολικών δευτερολέπτων από μια καθορισμένη ώρα και ημερομηνία. Είναι μια μορφή ημερομηνίας / ώρας (ή χρονικής σήμανσης) που φαίνεται διαφορετική από τις αναγνώσιμες από τον άνθρωπο ημερομηνίες και ώρες που έχουμε συνηθίσει. Αυτό είναι καθαρά για λόγους αποτελεσματικότητας. Χρειάζεται πολύ λιγότερος χώρος για την αποθήκευση ενός αριθμού που αντιπροσωπεύει δευτερόλεπτα από ό, τι για την αποθήκευση ξεχωριστών τιμών για το έτος, τον μήνα, την ώρα κ.λπ.
Φυσικά, με τους σύγχρονους όρους, η διαφορά χώρου δεν είναι καθόλου. Αλλά θεωρήστε ότι το Unix δημιουργήθηκε στα τέλη της δεκαετίας του 1960 όταν ο διαθέσιμος χώρος αποθήκευσης ήταν πολύ μικρότερος. Οι χρονικές σημάνσεις χρησιμοποιούνται επίσης πολύ, οπότε ο αποθηκευτικός χώρος τους αυξάνεται. Για παράδειγμα, κάθε αρχείο έχει τρεις χρονικές σφραγίδες που σχετίζονται με αυτό.
Η μορφή είναι σχεδόν αδύνατη να μεταφραστεί στο μυαλό σας, εκτός εάν είστε μαθηματική ιδιοφυΐα. Αλλά εξακολουθεί να έχει κάποια πλεονεκτήματα σε σχέση με πιο ευανάγνωστες εναλλακτικές λύσεις όπως Τετ, 21 Οκτ 2015 07:28:00 GMT. Μπορείτε να παραγγείλετε δύο χρονικές σφραγίδες Unix πολύ εύκολα, με μια ματιά. Συνήθως είναι πιο γρήγορο να επιλύσουμε τη διαφορά μεταξύ δύο χρονικών σημείων. Αυτό ισχύει ιδιαίτερα για ημερομηνίες που κλείνουν μεταξύ τους, όπως σε παρακείμενες ημέρες.
Σχετικά με την Εποχή
Έτσι, ο χρόνος Unix είναι ένας συνολικός αριθμός δευτερολέπτων από ένα συγκεκριμένο χρονικό σημείο. Αλλά τι είναι αυτό το χρονικό σημείο; Του 00:00:00 UTC επί 1η Ιανουαρίου 1970. Αυτό αναφέρεται συχνά ως το Unix Epoch. Οι προγραμματιστές επέλεξαν αυτήν την ημερομηνία για την εποχή εκτός ευκολίας, καθώς ήταν η πλησιέστερη στρογγυλή ημερομηνία όταν εφευρέθηκαν την ώρα του Unix.
Ίσως έχετε δει αυτήν την ημερομηνία όταν κάτι πήγε στραβά. Είναι σαφώς ένα σφάλμα, αλλά φαίνεται πολύ περίεργο όταν καταλήγει σε μια ημερομηνία πριν από την εποχή που γεννήθηκαν πολλοί από εμάς! Είναι εντελώς κατανοητό, ωστόσο, όταν γνωρίζετε για την ώρα Unix. Εάν κάποιο σύστημα προσπαθεί να εμφανίσει μια χρονική σήμανση που δεν έχει καμία τιμή, συχνά μεταφράζεται σε 0 και οδηγεί στην ακριβή ημερομηνία εποχής.
Η μορφή δεδομένων Unix Time
Ακριβώς, δεν υπάρχει. Ο αρχικός τύπος δεδομένων ήταν ακέραιος 32-bit, και αυτό παραμένει συχνά, ακόμη και σε πολύ πιο ισχυρά συστήματα.
Αυτός ο τύπος δεδομένων επιτρέπει στην τιμή να αποθηκεύει συνολικά 2 ^ 32 δευτερόλεπτα, που είναι λίγο πάνω από 136 χρόνια. Αυτή η τιμή είναι συνήθως υπογεγραμμένη, που σημαίνει ότι μπορεί να είναι αρνητική ή θετική. Έτσι, συνήθως αντιπροσωπεύει 68 χρόνια και στις δύο πλευρές της εποχής, δηλαδή 1902-2038.
Φυσικά, αυτή είναι μια περιορισμένη περίοδος. Αλλά η κύρια χρήση της μορφής χρονικής σήμανσης ήταν για έννοιες όπως η τροποποίηση αρχείων. Η ανάγκη ήταν πολύ να αντιπροσωπεύσουμε τον χρόνο κοντά στο παρόν, παρά την αρχαία ιστορία ή πολύ στο μέλλον. Ακόμα και για εφαρμογές όπως τα ημερολόγια, σπάνια υπάρχει ανάγκη να αναπαριστούν ημερομηνίες περισσότερες από μερικές δεκαετίες στο μέλλον.
Αλλά αυτό δεν σημαίνει ότι αυτό το περιορισμένο χρονικό διάστημα είναι χωρίς προβλήματα…
Το πρόβλημα του έτους 2038
Το σφάλμα Y2K (ένα από τα χειρότερα λάθη προγραμματισμού στην ιστορία) επηρέασε συστήματα υπολογιστών που αποθηκεύτηκαν χρόνια ως διψήφιες τιμές. Όταν ήρθε το έτος 2000, τέτοια συστήματα το αντιμετώπισαν σαν να ήταν το 1900. Στην εκδήλωση, αυτό δεν ήταν τόσο καταστροφικό όσο φοβόταν, κυρίως επειδή πολλοί άνθρωποι ξόδεψαν πολύ χρόνο και προσπάθεια εκ των προτέρων, προετοιμαζόμενοι για αυτό.
Στο ιστορικό του παρελθόν, κωδικοποίησε επίσης την καταστροφή. Οι εμφανίσεις λίγο κακού κώδικα προκάλεσαν καταστροφή σε σημαντικό επίπεδο. Τα παρακάτω είναι 10 από τα χειρότερα λάθη προγραμματισμού στην ιστορία.
Εάν δώσατε προσοχή στην προηγούμενη ενότητα, ενδέχεται να έχετε εντοπίσει ένα παρόμοιο πρόβλημα που θα μπορούσε να επηρεάσει την ώρα του Unix. Λοιπόν, ο χρόνος Unix έχει δικό του πρόβλημα δεδομένων: το πρόβλημα Y2k38. (Αναφέρεται συχνά ως πρόβλημα, όχι ως σφάλμα. ίσως έχουμε γίνει πιο αισιόδοξοι από το έτος 2000!) Όταν ο χρόνος Unix τελειώνει κυριολεκτικά το 2038, τα συστήματα θα αντιμετωπίζουν νέες ημερομηνίες είτε ως 1902 είτε 1970. Ή πιθανότατα θα αποτύχουν εντελώς.
Τουλάχιστον αυτό το πρόβλημα δεν θα μας χτυπήσει στα μεσάνυχτα της Παραμονής της Πρωτοχρονιάς. Το τελευταίο δευτερόλεπτο του χρόνου Unix 32-bit θα πέσει στις 19 Μαρτίου. Ενδεχομένως, πιθανότατα θα αναβαθμίσουμε τα περισσότερα συστήματα έως το 2038 ή θα είναι ξεπερασμένα από τότε.
Μερικοί χρήσιμοι πόροι χρονικής σήμανσης
ο Μετατροπέας Epoch Ο ιστότοπος είναι πιθανώς ο πιο ολοκληρωμένος διαθέσιμος μετατροπέας χρονικής σήμανσης. Ξεκινά με την εμφάνιση του τρέχοντος χρόνου Unix - σε πραγματικό χρόνο - και προσθέτει σχεδόν κάθε δυνατότητα που μπορεί να φανταστεί κανείς. Η κύρια χρήση του είναι για τη μετατροπή μεταξύ χρονοσήμων και ημερομηνιών αναγνώσιμων από τον άνθρωπο, και στις δύο κατευθύνσεις.
Το Dan's Tools είναι μια τεράστια συλλογή χρήσιμων εφαρμογών ιστού, μία από τις οποίες είναι μετατροπέας χρονικής σήμανσης. Είναι πιο βασικό, αλλά έχει μια πολύ καθαρή παρουσίαση και είναι εύκολο στη χρήση.
Η ώρα είναι παρουσιάζει μια άλλη, ακόμη πιο μινιμαλιστική εμφάνιση. Δείχνει χρόνο σε διάφορες μορφές, συμπεριλαμβανομένου του χρόνου Unix. Περιλαμβάνει την τρέχουσα ώρα στον τίτλο της σελίδας που είναι χρήσιμη.
Σε Linux και macOS, το ημερομηνία Το πρόγραμμα είναι το βασικό βοηθητικό πρόγραμμα για την αντιμετώπιση της ημερομηνίας / ώρας, συμπεριλαμβανομένων των χρονικών σημείων Unix. Κλήθηκε χωρίς ορίσματα, επιστρέφει την τρέχουσα ημερομηνία / ώρα σε μορφή αναγνώσιμη από τον άνθρωπο:
ημερομηνία $
Τετ 10 Φεβ 12:28:30 GMT 2021
Εάν χρειάζεστε την τρέχουσα ημερομηνία / ώρα στην ώρα Unix, χρησιμοποιήστε το +% s διαφωνία:
$ ημερομηνία +% s
1612960114
Μπορείτε να μετατρέψετε από μια αναγνώσιμη από τον άνθρωπο ημερομηνία σε μια χρονική σήμανση χρησιμοποιώντας το -ρε επισημάνετε εάν η έκδοση του ημερομηνία το υποστηρίζει. Οι περισσότερες εκδόσεις Linux πρέπει, από προεπιλογή:
$ date -d "2 Ιανουαρίου 1970" +% s
82800
Σε macOS, ημερομηνία είναι ένα διαφορετικό πρόγραμμα, το οποίο απαιτεί ένα διαφορετικό σύνολο σημαιών:
$ date -j -f "% b% d% Y% T" "02 Ιαν 1970 00:00:00" "+% s"
82800
Πηγαίνοντας προς την άλλη κατεύθυνση, μπορείτε να μετατρέψετε από μια χρονική σήμανση Unix χρησιμοποιώντας το -ρ σημαία:
ημερομηνία $ -r 1600000000
Κυρ 13 Σεπ 2020 13:26:40 BST
Ορισμένα άλλα προγράμματα χρησιμοποιούν το %μικρό μορφή για την αντιμετώπιση του χρόνου Unix. Για παράδειγμα, εάν θέλετε να εμφανίσετε την ημερομηνία τροποποίησης ενός αρχείου σε ώρα Unix, με το Έκδοση Linux του είναι, μπορείτε να χρησιμοποιήσετε τα ακόλουθα:
$ ls -l --time-style = +% s index.tmp.html
-rw-r - r-- 1 ubuntu ubuntu 17862 1521649818 index.tmp.html
Πώς να χρησιμοποιήσετε το Unix Time σε γλώσσες προγραμματισμού
Η PHP έχει το χρόνος() συνάρτηση που επιστρέφει την τρέχουσα χρονική σήμανση Unix. Του ημερομηνία() Η συνάρτηση παίρνει μια χρονική σήμανση ως το δεύτερο όρισμα:
$ php -r 'echo date ("Y-m-d", ώρα ());'
2021-02-11
Η JavaScript προσεγγίζει τα πράγματα με ενδιαφέρον τρόπο. Εχει ένα Ημερομηνία. Τώρα () μέθοδος για να λάβετε τον αριθμό χιλιοστών του δευτερολέπτου από την εποχή του Unix. Φυσικά, μπορείτε να το διαιρέσετε με 1.000 και να ολοκληρώσετε το αποτέλεσμα για να δώσετε τον ισοδύναμο χρόνο Unix σε δευτερόλεπτα:
> Math.floor (Date.now () / 1000)
1613083012
Κατανόηση του Unix Time
Ο χρόνος Unix είναι μια απλή ιδέα που αναπτύσσεται σε πολλά μέρη. Μόλις το καταλάβετε, μπορεί να το βρείτε πολύ χρήσιμο, για παράδειγμα, κατά τον υπολογισμό των χρονικών διαφορών. Μπορείτε επίσης να αναγνωρίσετε πότε μπορεί να είναι η αιτία ορισμένων σφαλμάτων.
Έννοιες όπως η εποχή και οι χρονικές σημάνσεις είναι ένα σημαντικό μέρος για να ξεκινήσετε με το Linux. Για να μάθετε περισσότερα σχετικά με τα βασικά όπως είναι, ανατρέξτε στον οδηγό μας για βασικές εντολές Linux.
Θέλετε να εξοικειωθείτε με το Linux; Ξεκινήστε με αυτές τις βασικές εντολές Linux για να μάθετε τυπικές εργασίες υπολογιστών.
- Απροσδιόριστος

Ο Bobby είναι λάτρης της τεχνολογίας που εργάστηκε ως προγραμματιστής λογισμικού για τις περισσότερες από δύο δεκαετίες. Είναι παθιασμένος με το gaming, εργάζεται ως Editor Editor στο Switch Player Magazine και είναι βυθισμένος σε όλες τις πτυχές των διαδικτυακών εκδόσεων και της ανάπτυξης ιστού.
Εγγραφείτε στο Newsletter μας
Εγγραφείτε στο ενημερωτικό δελτίο μας για τεχνικές συμβουλές, κριτικές, δωρεάν ebook και αποκλειστικές προσφορές!
Ένα ακόμη βήμα…!
Επιβεβαιώστε τη διεύθυνση email σας στο email που μόλις σας στείλαμε.