it-swarm-es.tech

¿Cómo puedo obtener una fecha formateada para una marca de tiempo UNIX desde la línea de comandos?

Tengo una marca de tiempo UNIX y me gustaría obtener una fecha formateada (como la salida de date) correspondiente a esa marca de tiempo.

Mis intentos hasta ahora:

$ date +%s
1282367908
$ date -d 1282367908
date: invalid date `1282367908'
$ date -d +1282367908
date: invalid date `+1282367908'
$ date +%s -d +1282367908
date: invalid date `+1282367908'

Me gustaría poder obtener resultados como:

$ TZ=UTC somecommand 1282368345
Sat Aug 21 05:25:45 UTC 2010
63
Umang

En Mac OS X y BSD:

$ date -r 1282368345
Sat Aug 21 07:25:45 CEST 2010
$ date -r 1282368345 +%Y-%m-%d
2010-08-21

con GNU herramientas principales (tienes que buscar en el archivo de información para eso):

$ date -d @1282368345
Sat Aug 21 07:25:45 CEST 2010
$ date -d @1282368345 --rfc-3339=date
2010-08-21

Con cualquiera, agregue el -u (estándar), o pasa un TZ=UTC0 variable de entorno para tener la fecha UTC (TZ=UTC0define una zona horaria llamada UTC con desplazamiento 0 desde UTC mientras que el comportamiento para TZ=UTC (sin desplazamiento) no está especificado (aunque en la mayoría de los sistemas se referiría a una zona horaria definida por el sistema también llamada UTC con desplazamiento 0 desde UTC)).

98
user601

Este Perl one-liner lo hará:

$ Perl -e 'print scalar localtime $ARGV[0]' 1282367908
Sat Aug 21 09:18:28 2010
6
AlexD

Después de buscar en Google, encontré la manera de hacerlo solo con el comando date:

$ date --date "Jan 1, 1970 00:00:00 +0000 + 1282367908 seconds"
Sat Aug 21 09:18:28 MSD 2010
6
AlexD

Con Shell incorporado:

  • zsh (4.1.1 (2003) y superior):

    $ zmodload zsh/datetime
    $ TZ=UTC0 strftime %c 1282368345
    Sat 21 Aug 2010 05:25:45 UTC
    
  • ksh93 (ksh93i (2000) y superior):

    $ TZ=UTC0 printf '%(%c)T\n' '#1282368345'
    Sat Aug 21 05:25:45 2010
    
  • bash (4.2 (2010) y superior):

    $ TZ=UTC0 printf '%(%c)T\n' 1282368345
    Sat 21 Aug 2010 05:25:45 UTC
    

En todos esos, reemplace %c Con el formato strftime() que desee.

5

Responda a una pregunta anterior, pero creo que esto podría ser una mejora si alguien más lo busca. Esta función Bash funciona tanto en Linux como en OS X. No he probado en ningún otro sistema BSD. Pase el tiempo de época como argumento para esta función e imprimirá el formato de tiempo RFC-3339.

epochtorfc3339 ()
{
    RFC3339_FORMAT="+%FT%T:::%z"
    Epoch=$(echo [email protected] | sed -n "s/.*\([0-9]\{10\}\).*/\1/p");
    if date --version >/dev/null 2>/dev/null; then
        # Linux
        date ${RFC3339_FORMAT} -d "1970-01-01 UTC ${Epoch} seconds"
        #date -d @${Epoch} --rfc-3339=seconds
    else
        # OS X/BSD
        date -r ${Epoch} ${RFC3339_FORMAT}
    fi
}
2
Noah Spurrier

En osx, tener en UTC

date -r "1475737200" -u
2
anyone

Otro buen ejemplo de la rica herencia del Unix moderno. De hecho, esto es posible en la mayoría de las variantes BSD:

$ TZ=UTC date -r 1282368345
Sat Aug 21 05:25:45 UTC 2010

(Por cierto, su ejemplo parece estar apagado por un segundo)

1
codehead