Wie wir die Zeit messen, ist ziemlich chaotisch. Eine Minute hat 60 Sekunden und eine Stunde 60 Minuten. Das stammt aus dem alten Babylon, wo die 60 die Grundlage des Zahlensystems war. Ein Tag hat 24 Stunden, eine Woche 7 Tage, und wie viele Tage hat ein Monat? Nun, die Anzahl der Tage in einem Monat hängt nicht nur davon ab, um welchen Monat es geht, sondern auch davon, welcher Kalendertyp in dem Land verwendet wird, in dem du lebst.
Was wäre, wenn wir stattdessen Zeitintervalle nur in Sekunden angeben würden? Dann könnten wir metrische Vorsätze verwenden, um große Sekundenzahlen in leichter verständlichen Größen zu schreiben.
Wenn wir jemals den Mars oder einen anderen Planeten besiedeln, wird das Messen der Zeit noch chaotischer. Wenn jemand „Jahr“ sagt, meint er dann ein Jahr auf der Erde oder ein Jahr auf dem Mars?
Die Idee für diese Übung stammt aus dem Science-Fiction-Roman "A Deepness in the Sky" des Autors Vernor Vinge. Darin verwendet der Autor das metrische System als Grundlage für Zeitmessungen.
Deine Aufgabe ist es, das Datum und die Uhrzeit eine Gigasekunde nach einem bestimmten Datum zu ermitteln.
Eine Gigasekunde sind eine Milliarde Sekunden. Das ist eine Eins mit neun Nullen.
Wenn du am 24. Januar 2015 um 22:00 Uhr geboren wärst, dann wärst du am 2. Oktober 2046 um 23:46:40 Uhr eine Gigasekunde alt.
bash hat von Haus aus keine Möglichkeit, Strings mit Datum und Uhrzeit zu parsen.
Für diese Übung musst du ein externes Programm aufrufen.
-d des GNU-Befehls date kannst du eine Vielzahl von Formaten parsen.date und seine Option -f an.Time::Piece-Modul kannst du Zeitstempel parsen.Datumswerte kann bash auch ganz ohne externe Tools formatieren.
Wenn dir ein Zeitwert als Ganzzahl vorliegt (Sekunden seit der Epoche), kannst du mit dem Formatierungsspezifizierer %()T von printf eine Formatierung im Stil von „strftime“ anwenden.
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
Melde dich bei Exercism an, um Bash mit 97 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.