GNU/Linux >> Tutoriales Linux >  >> Linux

Calcular días desde el 1/1/1970

Solución 1:

ring0 me ganó por unos segundos, pero el comando completo es:

echo $(($(date --utc --date "$1" +%s)/86400))

Esto va por hora UTC. Resultado:

[email protected]:~# echo $((`date --utc --date "$1" +%s`/86400))
14984

Una verificación rápida con WolframAlpha muestra que este es el valor correcto.

Solución 2:

Creo que este es el método más simple:

expr $(date +%s) / 86400

Solución 3:

El date El comando puede darte la cantidad de segundos desde 1970-01-01 00:00:00 UTC .

  date +"%s"

Puedes dividir el resultado por 3600*24 para obtener el número de días (UTC).

P.ej. en bash

  x=`date +"%s"` ; echo $(( $x / 3600 / 24 ))

para mostrar el número de días.

Solución 4:

También necesitaba resolver esto, pero quería obtener el mismo valor para el día, independientemente de la hora del día. Con enfoques como los que se muestran aquí, el valor cambiará a la medianoche UTC en lugar de la medianoche hora local. Esto probablemente parezca un problema menor en la UE o la costa este de EE. UU., que están lo suficientemente cerca de UTC como para que el valor del día no cambie en medio de un día laboral típico, pero en, por ejemplo, California, el cambio de día ocurriría a las 4 p.m. PST, lo que podría ser un inconveniente. Imagino que a los australianos les molestaría especialmente que el valor del día cambiara a última hora de la mañana.

Si queremos corregir eso, debemos agregar el desplazamiento de UTC antes de dividir por segundos/día. Afortunadamente, el comando de fecha de Linux incluye un %z secuencia de formato que informa el desplazamiento de UTC. Mientras que el formato estándar (este resultado es para la hora de Denver, MDT):

$ date +%z
-0600

. . . no se puede usar directamente en un cálculo, los modificadores correctos producirán lo que queremos:

$ date +%-:::z
-6

Póngalo junto con las conversiones habituales de segundos/horas/días, y creo que lo siguiente debería generar los días desde el 1/1/1970, siendo el 1/1/1970 el día cero y el valor aumentando a la medianoche hora local:/P>

echo $(( ( $(date +"%s + ( %-:::z * 3600)") ) / 86400 ))

Este cálculo simple no funcionará para las zonas horarias que no estén compensadas con UTC por horas enteras (por ejemplo, India, TZ=Asia/Kolkata), ya que el "+5:30" producido por date +%-:::z producirá un error de "carácter no válido en la expresión" cuando se use en la declaración anterior.


Linux
  1. Obtenga la hora actual en segundos desde la Época en Linux, Bash

  2. calcule el espacio total en disco utilizado por archivos de más de 180 días usando find

  3. restar días de una fecha en bash

  4. Convierta una fecha ISO en segundos desde la época en linux bash

  5. ¿Cuál es el significado de la dirección 10.0.0.1/24 de mi computadora (del comando ip addr)?

Comando de fecha en Linux

Instale LibreOffice 3.5 en CentOS 6.2/6.1/6.0 / CentOS 5.7

7 ejemplos de comando de fecha en Linux

Ubuntu 22.10 Nombre en clave y fecha de lanzamiento

Comparación de fechas en Bash

¿Jugando a Quake 1/2 en Linux?