Hogyan kaphatok formázott dátumot egy UNIX időbélyegzőhöz a parancssorból

Van UNIX időbélyegem, és szeretnék formázott dátumot kapni (például: date) kimenete, amely megfelel az időbélyegnek.

Eddigi próbálkozásaim:

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

Szeretnék kimenetet szerezni, például:

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

Válasz

Mac OS X és BSD rendszeren:

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

GNU alapeszközökkel (ehhez át kell ásni az információs fájlt):

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

Bármelyikkel adja hozzá a -u (standard) opciót, vagy adjon át egy TZ=UTC0 környezeti változó az UTC dátum megadásához (TZ=UTC0 meghatározza egy UTC nevű időzónát, 0 eltolással az UTC-től míg a TZ=UTC viselkedése (offszet nélkül) nincs meghatározva (bár a legtöbb rendszeren egy rendszer által meghatározott az időzóna más néven UTC, 0-s eltolással az UTC-től)).

Megjegyzések

  • Sokat igényel az ásás, ami meglepő egy ilyen gyakori feladatnál.
  • Köszönöm, elfogadta válaszát. Kicsit figyelmesebben kellett volna olvasnom a info coreutils date -et.
  • Ez egy kicsit más dátumot ad: date -r 1447264553943 eredmények Wed Dec 28 01:39:03 BRST 47831 -ban, amikor ' s valójában 11/11/2015, 3:55:53 PM GMT-2:00.
  • @falmp: akkor fog működni, ha másodperceket használsz mikroszekundumok helyett.
  • A @hop opsnak azt kellett volna kitalálnia, hogy az évszám 47831, de ez a szám olyan magas volt, hogy hiányzott. Köszönöm!

Válasz

Ez a perl egyvonalas meg fogja tenni:

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

Válasz

Némi guglizás után találtam rá módot a csak parancs:

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

Megjegyzések

  • Köszönöm ezt. Reméltem, hogy ' valami egyszerűbb dolog lesz, tehát egyelőre csak egy szavazat.
  • egy másik nagyszerű példa arra, hogy a google miért hülyít. soha nem olvassa el senki a dokumentációt?
  • @hop, a date -d @xxx támogatás csak a 2005-ös coreutils 5.3-ig került hozzáadásra. Ez ' s hogyan kellett ezt megtennie előtte.
  • @St é phaneChazelas: a) ez a válasz 2010-ből származik, és b) miért teszi ezt mentség a guglizásra a dokumentáció elolvasása előtt? Ha a saját hatóságától válaszol, felmenthető az ilyen hibák elkövetése, de ha mindenképp utána kell néznie, akkor keresse meg jól.
  • @hop, én csak arra mutattam rá, hogy nem hülye válasz, csak elavult.

Válasz

Shell beépítettekkel:

  • zsh (4.1.1 (2003) és újabb):

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

    $ TZ=UTC0 printf "%(%c)T\n" "#1282368345" Sat Aug 21 05:25:45 2010 
  • bash (4.2 (2010) és újabb):

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

Mindegyikben cserélje le a %c szót a kívánt strftime() formátumra.

Megjegyzések

Válasz

OSX-en az UTC-ben

date -r "1475737200" -u 

Megjegyzések

  • Köszönöm. Én ' szerkesztettem ezt az elfogadott válaszban, így az információk könnyebben elérhetők lesznek.

Válasz

Válasz egy régi kérdésre, de úgy gondolom, hogy ez javulást jelenthet, ha bárki más erre keres. Ez a Bash funkció Linux és OS X operációs rendszereken is működik. Nem teszteltem más BSD rendszereken. Adja meg a korszakot érvként ennek a függvénynek, és kinyomtatja az RFC-3339 időformátumot.

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 } 

Válasz

A modern Unix gazdag örökségének újabb szép példája. Ez valóban lehetséges a legtöbb BSD változatnál:

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

(Úgy tűnik, a BTW példád egy másodpercre kikapcsol)

Megjegyzések

  • Nem működik ' Linux alatt. Úgy tűnik, hogy a hop ' válaszra a helyes Linux válasz adható. Köszönöm, hogy rámutattál erre, gyanítottam, hogy valami ilyesmi fog történni, én ' 45 másodpercet tettem meg.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük