GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo se las arregla la fecha de Coreutil para obtener resultados tan extraños?

Estaba jugando con date para tratar de convertir expresiones como "2 horas" en 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/timezone contiene "Europa/París", de ahí el uso de TZ para forzar la hora 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 date podría haber llegado a los tres últimos resultados. ¿Alguien entiende la lógica entre esos resultados?

Respuesta aceptada:

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

Entonces es ver la palabra 'minutos' y tratarla como sinónimo de minuto, por lo que le da un minuto más tarde.

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

[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

Tenga en cuenta el UTC después del campo de segundos. También puedes poner un segundo +0 :

[email protected]:~$ 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 puedes poner una Z después de los segundos, etc. En realidad no necesitas el TZ variable de entorno que se establecerá en UTC en los ejemplos anteriores.


Linux
  1. Cómo administrar las capacidades de archivos de Linux

  2. ¿Cómo hacer A Ls y luego ordenar los resultados por fecha de creación?

  3. ¿Cómo obtengo la diferencia entre dos fechas en bash?

  4. Cómo obtener el uso de la CPU

  5. ¿Cómo obtener la fecha/hora de creación del archivo en Bash/Debian?

Cómo obtener la fecha y hora actuales en Python

Cómo obtener la fecha y hora actuales en JavaScript

¿Cómo obtener solo archivos creados después de una fecha con Ls?

¿Cómo hacer que el reloj muestre la fecha?

Cómo obtener formato de fecha y hora en python

¿Cómo agrego X días a la fecha y obtengo una nueva fecha?