Alle anderen Fragen im SE-Netzwerk beziehen sich auf Szenarien, in denen entweder das Datum als now
( Q ) angenommen wird oder nur ein Datum angegeben wird ( Q ).
Ich möchte ein Datum und eine Uhrzeit angeben und dann eine Uhrzeit davon abziehen.
Folgendes habe ich zuerst versucht:
date -d "2018-12-10 00:00:00 - 5 hours - 20 minutes - 5 seconds"
Dies führt zu 2018-12-10 06:39:55
- Es wurden 7 Stunden hinzugefügt. Dann werden 20:05 Minuten abgezogen.
Nachdem ich die man
und info
Seite von gelesen hatte date
, dachte ich, ich hätte es folgendermaßen behoben:
date -d "2018-12-10T00:00:00 - 5 hours - 20 minutes - 5 seconds"
Aber das gleiche Ergebnis. Woher kommen die 7 Stunden überhaupt?
Ich habe auch andere Daten ausprobiert, weil ich dachte, wir hätten an diesem Tag vielleicht 7200 Schaltsekunden, wer weiß, lol. Aber die gleichen Ergebnisse.
Noch ein paar Beispiele:
$ date -d "2018-12-16T00:00:00 - 24 hours" +%Y-%m-%d_%H:%M:%S
2018-12-17_02:00:00
$ date -d "2019-01-19T05:00:00 - 2 hours - 5 minutes" +%Y-%m-%d_%H:%M:%S
2019-01-19_08:55:00
Aber hier wird es interessant. Wenn ich die Zeit bei der Eingabe weglasse, funktioniert es gut:
$ date -d "2018-12-16 - 24 hours" +%Y-%m-%d_%H:%M:%S
2018-12-15_00:00:00
$ date -d "2019-01-19 - 2 hours - 5 minutes" +%Y-%m-%d_%H:%M:%S
2019-01-18_21:55:00
$ date --version
date (GNU coreutils) 8.30
Was vermisse ich?
Update: Ich habe ein Z
am Ende hinzugefügt , und es hat das Verhalten geändert:
$ date -d "2019-01-19T05:00:00Z - 2 hours" +%Y-%m-%d_%H:%M:%S
2019-01-19_04:00:00
Ich bin immer noch verwirrt. Darüber gibt es auf der GNU-Infoseite zum Datum nicht viel .
Ich vermute, dies ist ein Problem mit der Zeitzone, zitiere aber das Kalender-Wiki zu ISO 8601 :
Wenn keine UTC-Beziehungsinformationen mit einer Zeitdarstellung angegeben werden, wird angenommen, dass die Zeit in Ortszeit ist.
Welches ist, was ich will. Meine Ortszeit ist auch richtig eingestellt. Ich bin nicht sicher, warum Datum mit der Zeitzone in diesem einfachen Fall, in dem ich eine Datums- / Uhrzeitangabe liefere und etwas davon subtrahieren möchte, in Konflikt geraten würde. Sollte es nicht zuerst die Stunden vom Datumsstring subtrahieren? Auch wenn es es zuerst in ein Datum konvertiert und dann die Subtraktion durchführt, bekomme ich genau das, was ich will, wenn ich keine Subtraktionen auslasse:
$ date -d "2019-01-19T05:00:00" +%Y-%m-%d_%H:%M:%S
2019-01-19_05:00:00
So IF dies wirklich eine Zeitzone Frage ist, woher kommt der Wahnsinn gekommen?