Tutte le altre domande sulla rete SE riguardano scenari in cui si presume che la data sia now
( Q ) o in cui è specificata solo una data ( Q ).
Quello che voglio fare è fornire una data e un'ora, quindi sottrarre un orario da quello.
Ecco cosa ho provato prima:
date -d "2018-12-10 00:00:00 - 5 hours - 20 minutes - 5 seconds"
Ciò si traduce in 2018-12-10 06:39:55
: ha aggiunto 7 ore. Quindi sottratto 20:05 minuti.
Dopo aver letto la pagina man
e info
di date
, ho pensato di averlo corretto con questo:
date -d "2018-12-10T00:00:00 - 5 hours - 20 minutes - 5 seconds"
Ma stesso risultato. Da dove arriva anche le 7 ore?
Ho provato anche altre date perché pensavo che forse quel giorno avremmo avuto 7200 secondi da saltare, chissà che lol. Ma stessi risultati.
Alcuni altri esempi:
$ 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
Ma qui diventa interessante. Se ometto il tempo di input, funziona bene:
$ 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
Cosa mi sto perdendo?
Aggiornamento: ho aggiunto Z
a alla fine e ha cambiato il comportamento:
$ date -d "2019-01-19T05:00:00Z - 2 hours" +%Y-%m-%d_%H:%M:%S
2019-01-19_04:00:00
Sono comunque confuso. Non c'è molto al riguardo nella pagina di informazioni GNU sulla data.
Immagino che questo sia un problema di fuso orario, ma citando The Calendar Wiki su ISO 8601 :
Se non viene fornita alcuna informazione sulla relazione UTC con una rappresentazione dell'ora, si presume che l'ora sia l'ora locale.
Qual è quello che voglio. Anche la mia ora locale è impostata correttamente. Non sono sicuro del perché la data rovinerebbe affatto il fuso orario in questo semplice caso in cui fornivo un datetime e volevo sottrarre qualcosa da esso. Non dovrebbe sottrarre prima le ore dalla stringa della data? Anche se prima lo converte in una data e poi fa la sottrazione, se tralascio qualsiasi sottrazione ottengo esattamente quello che voglio:
$ date -d "2019-01-19T05:00:00" +%Y-%m-%d_%H:%M:%S
2019-01-19_05:00:00
Quindi se questo è davvero un problema di fuso orario, da dove viene quella follia?