Am un timestamp UNIX și aș dori să obțin o dată formatată (cum ar fi ieșirea date
) corespunzătoare marcajului de timp respectiv.
Încercările mele de până acum:
$ 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-ar plăcea să pot obține rezultate precum:
$ TZ=UTC somecommand 1282368345 Sat Aug 21 05:25:45 UTC 2010
Răspuns
Pe Mac OS X și BSD:
$ date -r 1282368345 Sat Aug 21 07:25:45 CEST 2010 $ date -r 1282368345 +%Y-%m-%d 2010-08-21
cu instrumentele de bază GNU (trebuie să căutați fișierul de informații pentru asta):
$ date -d @1282368345 Sat Aug 21 07:25:45 CEST 2010 $ date -d @1282368345 --rfc-3339=date 2010-08-21
Cu oricare dintre acestea, adăugați opțiunea -u
(standard) sau treceți un TZ=UTC0
variabilă de mediu pentru a avea data UTC (TZ=UTC0
definește un fus orar numit UTC
cu offset 0 de la UTC în timp ce comportamentul pentru TZ=UTC
(fără offset) este nespecificat (deși pe majoritatea sistemelor se referă la un sistem definit fusul orar numit și UTC
cu offset 0 de la UTC)).
Comentarii
Răspuns
Acest perl one-liner o va face:
$ perl -e "print scalar localtime $ARGV[0]" 1282367908 Sat Aug 21 09:18:28 2010
Răspuns
După câteva căutări, am găsit modalitatea de a o face cu date
numai comandă:
$ date --date "Jan 1, 1970 00:00:00 +0000 + 1282367908 seconds" Sat Aug 21 09:18:28 MSD 2010
Comentarii
- Vă mulțumim pentru asta. Speram că ' va fi ceva mai simplu, deci doar un vot sus pentru moment.
- un alt exemplu excelent pentru modul în care Google te face prost. nu mai citește nimeni documentația?
- @hop, suportul pentru
date -d @xxx
nu a fost adăugat până la coreutils 5.3 în 2005. Acel ' este modul în care trebuia să o faci înainte. - @St é phaneChazelas: a) acest răspuns este din 2010 și b) de ce face acest lucru scuzați Google înainte de a citi documentația? Dacă răspundeți din propria autoritate, vă puteți scuza să comiteți astfel de erori, dar dacă trebuie să îl căutați oricum, căutați-l bine.
- @hop, am subliniat doar că nu este un răspuns stupid, doar unul învechit.
Răspuns
Cu shell built-in:
-
zsh
(4.1.1 (2003) și mai sus):$ zmodload zsh/datetime $ TZ=UTC0 strftime %c 1282368345 Sat 21 Aug 2010 05:25:45 UTC
-
ksh93
(ksh93i
(2000) și mai sus):$ TZ=UTC0 printf "%(%c)T\n" "#1282368345" Sat Aug 21 05:25:45 2010
-
bash
(4.2 (2010) și mai sus):$ TZ=UTC0 printf "%(%c)T\n" 1282368345 Sat 21 Aug 2010 05:25:45 UTC
În toate acestea, înlocuiți %c
cu formatul strftime()
pe care îl doriți.
Comentarii
- Aveți o referință pentru
bash
printf
soluție? - Nevermind, am găsit-o în descrierea
printf
din gnu.org/software/bash/manual/bashref.html#Bash-Builtins .
Răspuns
Pe osx, a avea în UTC
date -r "1475737200" -u
Comentarii
- Mulțumesc. Am ' modificat în răspunsul acceptat, astfel încât informațiile să fie mai ușor disponibile.
Răspuns
Răspuns la o întrebare veche, dar cred că ar putea fi o îmbunătățire dacă altcineva caută acest lucru. Această funcție Bash funcționează atât pe Linux, cât și pe OS X. Nu am testat pe niciun alt sistem BSD. Treceți timpul de epocă ca argument pentru această funcție și va imprima formatul de timp 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 }
Răspuns
Un alt exemplu îngrijit al bogatului patrimoniu al Unixului modern. Acest lucru este într-adevăr posibil în majoritatea variantelor BSD:
$ TZ=UTC date -r 1282368345 Sat Aug 21 05:25:45 UTC 2010
(BTW exemplul dvs. pare să fie dezactivat cu o secundă)
Comentarii
- Nu funcționează ' pe Linux. hop ' răspunsul pare să aibă răspunsul corect Linux. Vă mulțumim că ați subliniat acest lucru, am bănuit că se va întâmpla așa ceva, ' am reușit acum 45 de secunde.
info coreutils date
puțin mai atent.date -r 1447264553943
rezultate înWed Dec 28 01:39:03 BRST 47831
, când ' este de fapt11/11/2015, 3:55:53 PM GMT-2:00
.