Hvordan kan jeg få en formatert dato for et UNIX-tidsstempel fra kommandolinjen

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 i Wed Dec 28 01:39:03 BRST 47831, når den ' faktisk er 11/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

  • Takk for det. Jeg håpet det ' ville være noe enklere, så bare en oppstemning for nå.
  • nok et godt eksempel på hvordan google gjør deg dum. les ingen noen gang dokumentasjonen lenger?
  • @hop, støtte for 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.
  • @St é phaneChazelas: a) dette svaret er fra 2010 og b) hvorfor gjør dette unnskyld googling før du leser dokumentasjonen? Hvis du svarer fra din egen autoritet, kan man unnskylde å gjøre feil som dette, men hvis du uansett må slå opp det, slå det opp riktig.
  • @hop, jeg påpekte bare at det ikke var et dumt svar, bare et utdatert.

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

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å.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *