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 loutput 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" 

Vorrei essere in grado di ottenere un output come:

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

Risposta

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 gli strumenti principali GNU (devi scavare nel file info per questo):

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

Con entrambe, aggiungi lopzione -u (standard) o passa un TZ=UTC0 variabile dambiente per avere la data UTC (TZ=UTC0 definisce un fuso orario chiamato UTC con offset 0 da UTC mentre il comportamento per TZ=UTC (senza offset) non è specificato (sebbene sulla maggior parte dei sistemi farebbe riferimento a un sistema definito fuso orario chiamato anche UTC con offset 0 da UTC)).

Commenti

  • Ci vuole molto di scavare, però, che è sorprendente per un compito così comune.
  • Grazie, ho accettato la tua risposta. Avrei dovuto leggere info coreutils date un po più attentamente.
  • Questo mi dà una data leggermente diversa: date -r 1447264553943 risultati in Wed Dec 28 01:39:03 BRST 47831, quando ' è effettivamente 11/11/2015, 3:55:53 PM GMT-2:00.
  • @falmp: funzionerà se usi i secondi invece dei microsecondi.
  • @hop ops, avrebbe dovuto pensare che lanno fosse 47831, ma quel numero era così alto che lho perso. Grazie!

Risposta

Questo perl one-liner lo farà:

$ perl -e "print scalar localtime $ARGV[0]" 1282367908 Sat Aug 21 09:18:28 2010 

Risposta

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

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

Commenti

  • Grazie per questo. Speravo che ' fosse qualcosa di più semplice, quindi per ora solo un voto positivo.
  • un altro ottimo esempio di come Google ti rende stupido. nessuno legge più la documentazione?
  • @hop, il supporto per date -d @xxx non è stato aggiunto fino a coreutils 5.3 nel 2005. Questo ' è come dovevi farlo prima.
  • @St é phaneChazelas: a) questa risposta è del 2010 eb) perché lo fa scusa googling prima di leggere la documentazione? Se rispondi dalla tua stessa autorità, puoi scusare di commettere errori come questo, ma se devi comunque cercarlo, cercalo bene.
  • @hop, stavo solo facendo notare che non lo era una risposta stupida, solo obsoleta.

Risposta

Con comandi incorporati della shell:

  • 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.

Commenti

Risposta

Su osx, da avere in UTC

date -r "1475737200" -u 

Commenti

  • Grazie. ' lho modificato nella risposta accettata in modo che le informazioni siano più prontamente disponibili.

Risposta

Rispondi a una vecchia domanda, ma penso che questo potrebbe essere un miglioramento se qualcun altro lo cerca. Questa funzione Bash funziona sia su Linux che su OS X. Non lho testata su nessun altro sistema BSD. Passa lora dellepoca come argomento a questa funzione e stamperà il formato dellora RFC-3339.

epochtorfc3339 () { RFC3339_FORMAT="+%FT%T:::%z" EPOCH=$(echo $@ | 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 } 

Risposta

Un altro bellesempio della ricca eredità di Unix moderno. Questo è effettivamente possibile con la maggior parte delle varianti BSD:

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

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

Commenti

  • ' non funziona su Linux. La risposta di hop ' sembra avere la risposta Linux corretta. Grazie per averlo fatto notare, sospettavo che sarebbe successo qualcosa del genere, ' ce lho fatta a 45 secondi adesso.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *