Ο τρόπος που μετράμε τον χρόνο είναι λίγο μπερδεμένος. Έχουμε 60 δευτερόλεπτα στο λεπτό και 60 λεπτά στην ώρα. Αυτό προέρχεται από την αρχαία Βαβυλώνα, όπου χρησιμοποιούσαν το 60 ως βάση του αριθμητικού τους συστήματος. Μια μέρα έχει 24 ώρες, μια εβδομάδα έχει 7 μέρες, και πόσες μέρες έχει ένας μήνας; Λοιπόν, ο αριθμός των ημερών σε έναν μήνα δεν εξαρτάται μόνο από το ποιος μήνας είναι, αλλά και από το είδος του ημερολογίου που χρησιμοποιείται στη χώρα όπου ζεις.
Τι θα γινόταν όμως αν χρησιμοποιούσαμε μόνο δευτερόλεπτα για να εκφράζουμε χρονικά διαστήματα; Τότε θα μπορούσαμε να χρησιμοποιήσουμε τα προθέματα του μετρικού συστήματος για να γράφουμε μεγάλους αριθμούς δευτερολέπτων σε ποσότητες πιο εύκολα κατανοητές.
Αν ποτέ αποικίσουμε τον Άρη ή κάποιον άλλο πλανήτη, η μέτρηση του χρόνου θα γίνει ακόμα πιο μπερδεμένη. Αν κάποιος πει "έτος", εννοεί ένα έτος στη Γη ή ένα έτος στον Άρη;
Η ιδέα για αυτή την άσκηση προήλθε από το μυθιστόρημα επιστημονικής φαντασίας "A Deepness in the Sky" του συγγραφέα Vernor Vinge. Σε αυτό, ο συγγραφέας χρησιμοποιεί το μετρικό σύστημα ως βάση για τις μετρήσεις του χρόνου.
Η αποστολή σου είναι να προσδιορίσεις την ημερομηνία και την ώρα ένα γιγαδευτερόλεπτο μετά από μια δεδομένη ημερομηνία.
Ένα γιγαδευτερόλεπτο είναι ένα δισεκατομμύριο δευτερόλεπτα. Δηλαδή ένα 1 με εννέα μηδενικά μετά.
Αν γεννήθηκες στις 24 Ιανουαρίου 2015 στις 22:00 (10:00:00 μ.μ.), τότε θα είχες ζήσει ένα γιγαδευτερόλεπτο στις 2 Οκτωβρίου 2046 στις 23:46:40 (11:46:40 μ.μ.).
Το bash δεν έχει ενσωματωμένους τρόπους για ανάλυση συμβολοσειρών ημερομηνίας-ώρας.
Αυτή η άσκηση απαιτεί να καλέσεις ένα εξωτερικό βοηθητικό πρόγραμμα.
-d της εντολής date του GNU μπορεί να αναλύσει μια μεγάλη ποικιλία μορφών.date του BSD και την επιλογή -f της.Time::Piece άρθρωμα της μπορεί να χρησιμοποιηθεί για ανάλυση χρονοσημάνσεων.Το bash μπορεί να μορφοποιήσει ημερομηνίες χωρίς εξωτερικά εργαλεία.
Δεδομένης μιας ακέραιας τιμής χρόνου (δευτερόλεπτα από την εποχή), ο μορφοποιητής printf %()T μπορεί να εφαρμόσει μορφοποίηση τύπου "strftime".
epoch=1234567890
printf '%(%Y-%m-%d %H:%M:%S)T\n' "$epoch"
# ==> 2009-02-13 18:31:30
# bash uses the `TZ` environment variable for the timezone.
TZ=Asia/Kolkata printf '%(%Y-%m-%d %H:%M:%S)T\n' "$epoch"
# ==> 2009-02-14 05:01:30
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Bash με 97 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.