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
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
- Hai un riferimento per
bash
printf
soluzione? - Non importa, lho trovata nella descrizione di
printf
in gnu.org/software/bash/manual/bashref.html#Bash-Builtins .
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.
info coreutils date
un po più attentamente.date -r 1447264553943
risultati inWed Dec 28 01:39:03 BRST 47831
, quando ' è effettivamente11/11/2015, 3:55:53 PM GMT-2:00
.