Jeg har et UNIX-tidsstempel og vil gjerne få en formatert dato (som utgangen av date
) som tilsvarer den tidsstemplet.
Mine forsøk så langt:
$ 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"
Jeg vil gjerne kunne få utdata som:
$ TZ=UTC somecommand 1282368345 Sat Aug 21 05:25:45 UTC 2010
Svar
På Mac OS X og BSD:
$ date -r 1282368345 Sat Aug 21 07:25:45 CEST 2010 $ date -r 1282368345 +%Y-%m-%d 2010-08-21
med GNU-kjerneverktøy (du må grave deg gjennom infofilen for det):
$ date -d @1282368345 Sat Aug 21 07:25:45 CEST 2010 $ date -d @1282368345 --rfc-3339=date 2010-08-21
Legg til alternativet -u
(standard), eller send et TZ=UTC0
miljøvariabel for å ha UTC-datoen (TZ=UTC0
definerer en tidssone kalt UTC
med forskyvning 0 fra UTC mens oppførselen for TZ=UTC
(uten forskyvning) er uspesifisert (selv om de fleste systemene vil referere til et systemdefinert tidssone også kalt UTC
med forskyvning 0 fra UTC)).
Kommentarer
- Det tar mye graving, noe som er overraskende for en så vanlig oppgave.
- Takk, godtok svaret ditt. Jeg burde ha lest
info coreutils date
litt mer nøye. - Dette gir meg en litt annen dato:
date -r 1447264553943
resultater iWed Dec 28 01:39:03 BRST 47831
, når den ' faktisk er11/11/2015, 3:55:53 PM GMT-2:00
. - @falmp: det vil fungere hvis du bruker sekunder i stedet for mikrosekunder.
- @hop ops, burde ha funnet ut med at året var 47831, men det tallet var så høyt at jeg savnet det. Takk!
Svar
Denne perl-linjeren gjør det:
$ perl -e "print scalar localtime $ARGV[0]" 1282367908 Sat Aug 21 09:18:28 2010
Svar
Etter litt googling fant jeg måte å gjøre det med date
bare kommando:
$ date --date "Jan 1, 1970 00:00:00 +0000 + 1282367908 seconds" Sat Aug 21 09:18:28 MSD 2010
Kommentarer
Svar
Med innebygde skall:
-
zsh
(4.1.1 (2003) og over):$ zmodload zsh/datetime $ TZ=UTC0 strftime %c 1282368345 Sat 21 Aug 2010 05:25:45 UTC
-
ksh93
(ksh93i
(2000) og over):$ TZ=UTC0 printf "%(%c)T\n" "#1282368345" Sat Aug 21 05:25:45 2010
-
bash
(4.2 (2010) og over):$ TZ=UTC0 printf "%(%c)T\n" 1282368345 Sat 21 Aug 2010 05:25:45 UTC
I alle disse bytter du ut %c
med strftime()
-formatet du vil ha.
Kommentarer
- Har du en referanse til
bash
printf
løsning? - Nevermind, jeg fant den i beskrivelsen av
printf
i gnu.org/software/bash/manual/bashref.html#Bash-Builtins .
Svar
På osx, å ha i UTC
date -r "1475737200" -u
Kommentarer
- Takk. Jeg ' har redigert det i det aksepterte svaret slik at informasjonen er lettere tilgjengelig.
Svar
Svar på et gammelt spørsmål, men jeg tror dette kan være en forbedring hvis noen andre søker etter dette. Denne Bash-funksjonen fungerer både på Linux og OS X. Jeg har ikke testet på noen andre BSD-systemer. Send epoken som et argument til denne funksjonen, og den vil skrive ut tidsformatet 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 }
Svar
Et annet pent eksempel på den rike arven til moderne Unix. Dette er faktisk mulig under de fleste BSD-varianter:
$ TZ=UTC date -r 1282368345 Sat Aug 21 05:25:45 UTC 2010
(BTW eksempelet ditt ser ut til å være av med ett sekund)
Kommentarer
- Fungerer ' ikke på Linux. hop ' s svar ser ut til å ha det riktige Linux-svaret. Takk for at du påpekte at jeg mistenkte at noe sånt ville skje. Jeg ' har klart det 45 sekunder nå.
date -d @xxx
ble ikke lagt til før coreutils 5.3 i 2005. At ' hvordan du måtte gjøre det før det.