Hur kan jag få ett formaterat datum för en UNIX-tidsstämpel från kommandoraden

Jag har en UNIX-tidsstämpel och jag skulle vilja få ett formaterat datum (som utdata från date) motsvarande den tidsstämpeln.

Mina försök hittills:

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

Jag skulle vilja kunna få utdata som:

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

Svar

På Mac OS X och BSD:

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

med GNU-kärnverktyg (du måste gräva igenom infofilen för det):

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

Med antingen lägger du till -u (standard) eller skickar ett TZ=UTC0 miljövariabel för att ha UTC-datumet (TZ=UTC0 definierar en tidszon som heter UTC med offset 0 från UTC medan beteendet för TZ=UTC (utan förskjutning) är ospecificerat (men i de flesta system hänvisar det till ett systemdefinierat tidszon kallas även UTC med offset 0 från UTC)).

Kommentarer

  • Det tar mycket att gräva, vilket är förvånande för en så vanlig uppgift.
  • Tack, accepterade ditt svar. Jag borde ha läst info coreutils date lite mer noggrant.
  • Detta ger mig ett något annat datum: date -r 1447264553943 resultat i Wed Dec 28 01:39:03 BRST 47831, när det ' faktiskt 11/11/2015, 3:55:53 PM GMT-2:00.
  • @falmp: det fungerar om du använder sekunder istället för mikrosekunder.
  • @hop ops, borde ha tänkt med att året var 47831, men det antalet var så högt att jag missade det. Tack!

Svar

Denna perl-one-liner gör det:

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

Svar

Efter lite googling hittade jag sätt att göra det med date endast kommando:

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

Kommentarer

  • Tack för det. Jag hoppades att det ' skulle vara något enklare, så bara en uppröstning för tillfället.
  • ytterligare ett bra exempel på hur google gör dig dum. läser ingen någonsin dokumentationen längre?
  • @hop, stöd för date -d @xxx lades inte förrän coreutils 5.3 2005. Att ' hur du var tvungen att göra det innan det.
  • @St é phaneChazelas: a) detta svar är från 2010 och b) varför gör detta ursäkta googla innan du läser dokumentationen? Om du svarar från din egen myndighet kan man ursäkta att göra fel som detta, men om du måste slå upp det ändå, slå upp det rätt.
  • @hop, jag påpekade bara att det inte var ett dumt svar, bara ett föråldrat svar.

Svar

Med inbyggda skal:

  • zsh (4.1.1 (2003) och senare):

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

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

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

I alla dessa, ersätt %c med strftime() -formatet du vill ha.

Kommentarer

Svar

På osx, att ha i UTC

date -r "1475737200" -u 

Kommentarer

  • Tack. Jag ' har redigerat det i det accepterade svaret så att informationen är lättare tillgänglig.

Svar

Svar på en gammal fråga, men jag tror att det kan vara en förbättring om någon annan söker efter detta. Denna Bash-funktion fungerar på både Linux och OS X. Jag har inte testat på några andra BSD-system. Skicka epoken som ett argument till den här funktionen så skrivs tidsformatet RFC-3339 ut.

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

Ett annat snyggt exempel på det rika arvet från modern Unix. Detta är verkligen möjligt under de flesta BSD-varianter:

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

(BTW ditt exempel verkar vara avstängt med en sekund)

Kommentarer

  • Fungerar ' inte på Linux. hop ' s svar verkar ha rätt Linux-svar. Tack för att ni påpekade det, jag misstänkte att något sådant skulle hända, jag ' har gjort det 45 sekunder nu.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *