Stavo giocando con date
per provare a convertire espressioni come "2 ore" in un numero di secondi come 7200. Ho pensato di poterlo eseguire con invocazioni come:
date -d "1970-01-01 00:00:00 + 2 hours" +"%s"
Tuttavia, ho notato risultati estremamente strani mentre lo facevo. (Il mio /etc/timezone
contiene "Europa/Parigi", da cui l'uso di TZ
per forzare gli orari UTC.)
omega:~$ TZ=utc date -d "1970-01-01 00:00:00" +"%s"
0
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + 0 minutes" +"%s"
60
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + -1 minutes" +"%s"
3660
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + 1 minutes" +"%s"
-3540
Il primo risultato è abbastanza ragionevole, ma sono davvero totalmente perplesso su come date
potrebbe essere venuto con gli ultimi tre risultati. Qualcuno capisce la logica tra questi risultati?
Risposta accettata:
Penso che stia prendendo il tuo + x
come identificatore di fuso orario (ad esempio, considera 2013-04-25 19:52:36 +4
è un timestamp valido, in un fuso orario 4 ore prima dell'ora UTC).
È quindi vedere la parola "minuti" e trattarla come sinonimo di minuto, quindi darti un minuto dopo.
Se inserisci un specificatore di fuso orario esplicito, funziona:
[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC" +"%s"
0
[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + 0 minutes" +"%s"
0
[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + -1 minutes" +"%s"
-60
[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + 1 minutes" +"%s"
60
Nota il UTC
dopo il campo dei secondi. Puoi anche inserire un secondo +0
:
[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 +0 + -1 minutes" +"%s"
-60
... ma almeno personalmente, è molto più difficile da leggere.
Oppure puoi inserire una Z
dopo i secondi, ecc. In realtà non hai bisogno del TZ
variabile di ambiente da impostare su UTC negli esempi precedenti.