it-swarm.it

Come posso ottenere una data formattata per un timestamp UNIX dalla riga di comando

Ho un timestamp UNIX e vorrei ottenere una data formattata (come l'output di date) corrispondente a quel timestamp.

I miei tentativi finora:

$ 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'

Mi piacerebbe essere in grado di ottenere output come:

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

Su Mac OS X e BSD:

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

con GNU strumenti principali (devi scavare attraverso il file di informazioni per quello):

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

Con entrambi, aggiungi -u (standard) opzione o passa un TZ=UTC0 variabile d'ambiente per avere la data UTC (TZ=UTC0definisce un fuso orario chiamato UTC con offset 0 da UTC mentre il comportamento per TZ=UTC (senza offset) non è specificato (anche se sulla maggior parte dei sistemi farebbe riferimento a un fuso orario definito dal sistema chiamato anche UTC con offset 0 da UTC)).

98
user601

Questo one-liner Perl lo farà:

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

Dopo aver cercato su Google, ho trovato il modo di farlo solo con il comando date:

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

Con i Shell incorporati:

  • zsh (4.1.1 (2003) e versioni successive):

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

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

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

In tutti questi, sostituisci %c Con il formato strftime() che desideri.

5

Rispondi a una vecchia domanda, ma penso che questo potrebbe essere un miglioramento se qualcun altro lo cerca. Questa funzione di Bash funziona sia su Linux che su OS X. Non ho testato su nessun altro sistema BSD. Passa il tempo Epoch come argomento a questa funzione e stamperà il formato orario 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

Su osx, per avere in UTC

date -r "1475737200" -u
2
anyone

Un altro esempio chiaro del ricco patrimonio di Unix moderno. Questo è effettivamente possibile nella maggior parte delle varianti di BSD:

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

(A proposito il tuo esempio sembra essere spento di un secondo)

1
codehead