Wszystkie pozostałe pytania w sieci SE dotyczą scenariuszy, w których zakłada się, że data to now
( Q ) lub w których określono tylko datę ( Q ).
Chcę podać datę i godzinę, a następnie odjąć czas od tego.
Oto, co próbowałem najpierw:
date -d "2018-12-10 00:00:00 - 5 hours - 20 minutes - 5 seconds"
Powoduje to 2018-12-10 06:39:55
- Dodano 7 godzin. Następnie odjęto 20:05 minut.
Po przeczytaniu man
i info
stronie date
, myślałem, że to naprawić z tym:
date -d "2018-12-10T00:00:00 - 5 hours - 20 minutes - 5 seconds"
Ale ten sam wynik. Skąd bierze się nawet 7 godzin?
Próbowałem również innych dat, ponieważ myślałem, że może mieliśmy 7200 sekund przestępnych tego dnia, kto zna lol. Ale te same wyniki.
Kilka innych przykładów:
$ 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
Ale tutaj robi się ciekawie. Jeśli pominę czas na wejściu, działa dobrze:
$ 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
czego mi brakuje?
Aktualizacja: dodałem Z
na końcu i zmieniło to zachowanie:
$ date -d "2019-01-19T05:00:00Z - 2 hours" +%Y-%m-%d_%H:%M:%S
2019-01-19_04:00:00
Nadal jestem zdezorientowany. Na stronie informacyjnej GNU o dacie nie ma wiele na ten temat.
Zgaduję, że jest to problem związany ze strefą czasową, ale cytuję Wiki Wiki na temat ISO 8601 :
Jeśli nie podano informacji o relacji UTC z reprezentacją czasu, zakłada się, że czas jest czasem lokalnym.
Właśnie tego chcę. Mój czas lokalny jest również ustawiony poprawnie. Nie jestem pewien, dlaczego data miałaby w ogóle zadzierać ze strefą czasową w tym prostym przypadku, w którym dostarczam datę i godzinę i chcę ją odjąć. Czy nie powinien najpierw odjąć godzin od ciągu daty? Nawet jeśli najpierw przekształci go w datę, a następnie odejmie, jeśli pominę jakieś odejmowania, otrzymam dokładnie to, czego chcę:
$ date -d "2019-01-19T05:00:00" +%Y-%m-%d_%H:%M:%S
2019-01-19_05:00:00
Więc IF to naprawdę jest to kwestia stref czasowych, gdzie ma to szaleństwo pochodzi?