Como a data do coreutil consegue obter resultados tão estranhos?

Como a data do coreutil consegue obter resultados tão estranhos?

Eu estava brincando para datetentar converter expressões como "2 horas" em um número de segundos como 7200. Achei que poderia fazer isso com invocações como:

date -d "1970-01-01 00:00:00 + 2 hours" +"%s"

No entanto, notei resultados extremamente estranhos ao fazê-lo. (My /etc/timezonecontém "Europa/Paris", daí o uso de TZpara forçar os horários 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

O primeiro resultado é bastante razoável, mas estou totalmente confuso sobre como datepoderia ter chegado aos três últimos resultados. Alguém entende a lógica entre esses resultados?

Responder1

Acho que está considerando + xo seu especificador de fuso horário (por exemplo, considere 2013-04-25 19:52:36 +4um carimbo de data / hora válido, em um fuso horário 4 horas antes do UTC).

É então ver a palavra 'minutos' e tratá-la como sinônimo de minuto, dando-lhe um minuto depois.

Se você inserir um especificador de fuso horário explícito, funcionará:

anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC" +"%s"   
0
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + 0 minutes" +"%s"
0
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + -1 minutes" +"%s" 
-60
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + 1 minutes" +"%s" 
60

Observe o UTCcampo após os segundos. Você também pode colocar um segundo +0:

anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 +0 + -1 minutes" +"%s"
-60

... mas pelo menos pessoalmente, isso é muito mais difícil de ler.

Ou você pode colocar um Zapós os segundos, etc. Na verdade, você não precisa que a TZvariável de ambiente seja definida como UTC nos exemplos acima.

informação relacionada