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
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
- Van referenciád a
bash
printf
megoldás? - Soha nem, megtaláltam a
printf
leírásában a gnu.org/software/bash/manual/bashref.html#Bash-Builtins .
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.
info coreutils date
-et.date -r 1447264553943
eredményekWed Dec 28 01:39:03 BRST 47831
-ban, amikor ' s valójában11/11/2015, 3:55:53 PM GMT-2:00
.