Necesito algo simple como date
, pero en segundos desde 1970 en lugar de la fecha, horas, minutos y segundos actuales.
date
no parece ofrecer esa opción hay una manera fácil?
Necesito algo simple como date
, pero en segundos desde 1970 en lugar de la fecha, horas, minutos y segundos actuales.
date
no parece ofrecer esa opción hay una manera fácil?
Respuestas:
Esto debería funcionar:
date +%s
%s seconds since 1970-01-01 00:00:00 UTC
a %s seconds since the epoch, 1970-01-01 00:00:00 UTC
porque la extrañé allí.
date
no está integrado bash
, por lo que su versión de bash
no tiene nada que ver con la date
implementación de su sistema.
date +%s.%N
date +%s%3N
Solo para agregar.
Obtenga los segundos desde la época (1 de enero de 1970) para cualquier fecha (por ejemplo, 21 de octubre de 1973).
date -d "Oct 21 1973" +%s
Convertir el número de segundos a la fecha
date --date @120024000
El comando date
es bastante versátil. Otra cosa genial que puedes hacer con la fecha (copiada descaradamente de date --help
). Muestre la hora local para las 9AM del próximo viernes en la costa oeste de los EE. UU.
date --date='TZ="America/Los_Angeles" 09:00 next Fri'
Mejor aún, tómese un tiempo para leer la página de manual http://man7.org/linux/man-pages/man1/date.1.html
date
o porque estoy usando zsh
(macOS Catalina) pero esto no funciona para mí. $ date -d "Oct 21 1973" +%s
Salidas en ejecuciónusage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
Hasta ahora, todas las respuestas utilizan el programa externo date
.
Desde Bash 4.2, printf
tiene un nuevo modificador %(dateformat)T
que, cuando se usa con argumentos, -1
genera la fecha actual con el formato dado por dateformat
, manejado por strftime(3)
( man 3 strftime
para obtener información sobre los formatos).
Entonces, para una solución Bash pura:
printf '%(%s)T\n' -1
o si necesita almacenar el resultado en una variable var
:
printf -v var '%(%s)T' -1
¡Sin programas externos ni subcapas!
Desde Bash 4.3, incluso es posible no especificar lo siguiente -1
:
printf -v var '%(%s)T'
(pero podría ser más sabio siempre dar el argumento -1
).
Si usa -2
como argumento en lugar de -1
, Bash usará la hora en que se inició el shell en lugar de la fecha actual. Esto se puede usar para calcular los tiempos transcurridos
$ printf -v beg '%(%s)T\n' -2
$ printf -v now '%(%s)T\n' -1
$ echo beg=$beg now=$now elapsed=$((now-beg))
beg=1583949610 now=1583953032 elapsed=3422
-2
en caso de que tenga un trabajo de ejecución más prolongado (piense en un script para controlar sus copias de seguridad) y envíe un correo al final "La copia de seguridad comenzó en $ somewhen completado en $ now", que se puede lograr -2
evitando almacenar un variable dedicada al principio.
Desde bash
5.0 ( lanzado el 7 de enero de 2019 ) puede usar la variable incorporada EPOCHSECONDS
.
$ echo $EPOCHSECONDS
1547624774
También hay EPOCHREALTIME
que incluye fracciones de segundos.
$ echo $EPOCHREALTIME
1547624774.371215
EPOCHREALTIME
se puede convertir a microsegundos (μs) eliminando el punto decimal. Esto puede ser de interés cuando se utiliza bash
la aritmética integrada (( expression ))
que solo puede manejar enteros.
$ echo ${EPOCHREALTIME/./}
1547624774371215
En todos los ejemplos anteriores, los valores de tiempo impresos son iguales para una mejor legibilidad. En realidad, los valores de tiempo diferirían ya que cada comando tarda una pequeña cantidad de tiempo en ejecutarse.
date +%s%3N
) puede usarecho $(( ${EPOCHREALTIME/./} / 1000 ))
Con la mayoría de las implementaciones de Awk:
awk 'BEGIN {srand(); print srand()}'
srand()
generalmente se siembran con la fecha / hora actual. La segunda llamada a srand()
devuelve el valor utilizado previamente como semilla.
Esta es una extensión de lo que ha hecho @pellucide, pero para Mac:
Para determinar el número de segundos desde la época (1 de enero de 1970) para una fecha determinada (por ejemplo, 21 de octubre de 1973)
$ date -j -f "%b %d %Y %T" "Oct 21 1973 00:00:00" "+%s"
120034800
Tenga en cuenta que, para completar, he agregado la parte de tiempo al formato. La razón es que date
tomará cualquier parte de la fecha que le diste y agregará el actual hora al valor proporcionado. Por ejemplo, si ejecuta el comando anterior a las 4:19 PM, sin la parte '00: 00: 00 ', agregará la hora automáticamente. De modo que "21 de octubre de 1973" se analizará como "21 de octubre de 1973 16:19:00". Eso puede no ser lo que quieres.
Para convertir su marca de tiempo a una fecha:
$ date -j -r 120034800
Sun Oct 21 00:00:00 PDT 1973
Página de manual de Apple para la implementación de la fecha: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/date.1.html
date
comando de BSD , mientras que cualquier solución que sugiera date -d
es para GNU date
. La fecha de BSD en macOS proviene de FreeBSD y comparte varias opciones con NetBSD y OpenBSD. Y esto está completamente separado de bash.
%N
opción mencionada por segundos fraccionarios en la fecha gnu falta en la fecha de MacOS. El 10.14, ninguno de los formatos está en la página del manual; están en la strftime(3)
página man, que no tendrá si no tiene Xcode instalado, y puede que no vea con el comando man incluso si lo tiene.