script - Obtén la hora actual en segundos desde la Época en Linux, Bash
programacion shell linux ejemplos (6)
Necesito algo simple como la date
, pero en segundos desde 1970 en lugar de la fecha actual, horas, minutos y segundos.
date
no parece ofrecer esa opción. hay una manera fácil?
Con la mayoría de las implementaciones de Awk:
awk ''BEGIN {srand(); print srand()}''
Esta es una extensión de lo que @pellucide ha hecho, 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. El motivo es que la date
tomará la parte de la fecha que le dio y agregará la hora actual al valor proporcionado. Por ejemplo, si ejecuta el comando anterior a las 4:19 PM, sin la parte ''00: 00: 00 '', se agregará la hora automáticamente. De tal manera 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 de nuevo 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
Esto debería funcionar:
date +%s
Hasta el momento, todas las respuestas utilizan la date
programa externo.
Desde Bash 4.2, printf
tiene un nuevo modificador %(dateformat)T
que, cuando se usa con el argumento -1
genera la fecha actual con el formato de fecha, manejado por strftime(3)
( man 3 strftime
para información sobre los formatos).
Entonces, para una solución pura Bash:
printf ''%(%s)T/n'' -1
o si necesita almacenar el resultado en una variable var
:
printf -v var ''%(%s)T'' -1
No hay programas externos ni subshells!
Desde Bash 4.3, incluso es posible no especificar el -1
:
printf -v var ''%(%s)T''
(pero podría ser más sabio dar siempre el argumento -1
no obstante).
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 (pero ¿por qué querría esto?).
Sólo para añadir.
Obtenga los segundos desde la época (1 de enero de 1970) para cualquier fecha dada (por ejemplo, 21 de octubre de 1973).
date -d "Oct 21 1973" +%s
Convertir el número de segundos de vuelta a la fecha
date --date @120024000
La date
comando es bastante versátil. Otra cosa interesante que puede hacer con la fecha (copiado sin reparos de la date --help
). Muestra la hora local para las 9AM del próximo viernes en la costa oeste de los Estados Unidos.
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
usa este script bash (mi ~/bin/epoch
):
#!/bin/bash
# get seconds since epoch
test "x$1" == x && date +%s && exit 0
# or convert epoch seconds to date format (see "man date" for options)
EPOCH="$1"
shift
date -d @"$EPOCH" "$@"