¿Cómo logra la fecha de Coreutil obtener resultados tan extraños?

¿Cómo logra la fecha de Coreutil obtener resultados tan extraños?

Estaba jugando para dateintentar convertir expresiones como "2 horas" a una cantidad de segundos como 7200. Pensé que podría realizar esto con invocaciones como:

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

Sin embargo, noté resultados extremadamente extraños mientras lo hacía. (Mi /etc/timezonecontiene "Europa/París", de ahí el uso de TZpara forzar las horas 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

El primer resultado es bastante razonable, pero estoy totalmente desconcertado acerca de cómo datese podrían haber obtenido los tres últimos resultados. ¿Alguien entiende la lógica entre esos resultados?

Respuesta1

Creo que lo está tomando + xcomo especificador de zona horaria (por ejemplo, considere 2013-04-25 19:52:36 +4que es una marca de tiempo válida, en una zona horaria 4 horas antes de UTC).

Luego ve la palabra "minutos" y la trata como sinónimo de minuto, por lo que le da un minuto más tarde.

Si ingresa un especificador de zona horaria explícito, funciona:

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

Tenga en cuenta el UTCcampo después de los segundos. También puedes poner un segundo +0:

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

... pero al menos personalmente, eso es mucho más difícil de leer.

O puede poner un Zdespués de los segundos, etc. En realidad, no necesita que la TZvariable de entorno esté configurada en UTC en los ejemplos anteriores.

información relacionada