Hvordan kan jeg få en formateret dato til et UNIX-tidsstempel fra kommandolinjen

Jeg har et UNIX-tidsstempel, og jeg vil gerne have en formateret dato (som f.eks. output af date) svarende til det tidsstempel.

Mine forsøg hidtil:

$ 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 gerne være i stand til at få output 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-kerneværktøjer (du skal grave gennem infofilen for det):

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

Med enten tilføj -u (standard) eller send en TZ=UTC0 miljøvariabel for at have UTC-datoen (TZ=UTC0 definerer en tidszone kaldet UTC med forskydning 0 fra UTC mens adfærden for TZ=UTC (uden forskydning) er uspecificeret (selvom de fleste systemer refererer til et systemdefineret tidszone kaldes også UTC med offset 0 fra UTC)).

Kommentarer

  • Det tager meget at grave, hvilket er overraskende for en sådan fælles opgave.
  • Tak, accepteret dit svar. Jeg burde have læst info coreutils date lidt mere omhyggeligt.
  • Dette giver mig en lidt anden dato: date -r 1447264553943 resultater i Wed Dec 28 01:39:03 BRST 47831, når det ' faktisk er 11/11/2015, 3:55:53 PM GMT-2:00.
  • @falmp: det fungerer, hvis du bruger sekunder i stedet for mikrosekunder.
  • @hop ops, skulle have regnet med, at året var 47831, men det tal var så højt, at jeg savnede det. Tak!

Svar

Denne perl one-liner gør det:

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

Svar

Efter noget googling fandt jeg måde at gøre det med date kun kommando:

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

Kommentarer

  • Tak for det. Jeg håbede, at der ' ville være noget enklere, så bare en opstemning for nu.
  • endnu et godt eksempel på, hvordan google gør dig dum. læser ingen nogensinde dokumentationen længere?
  • @hop, support til date -d @xxx blev ikke tilføjet før coreutils 5.3 i 2005. At ' hvordan du skulle gøre det før det.
  • @St é phaneChazelas: a) dette svar er fra 2010 og b) hvorfor gør dette undskyld googling inden du læser dokumentationen? Hvis du svarer fra din egen autoritet, kan man undskylde at lave fejl som denne, men hvis du alligevel skal slå det op, skal du slå det op.
  • @hop, jeg påpegede bare, at det ikke var et dumt svar, bare et forældet.

Svar

Med shell-indbyggede:

  • zsh (4.1.1 (2003) og derover):

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

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

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

I alle disse skal du erstatte %c med det ønskede strftime() -format.

Kommentarer

Svar

På osx, at have i UTC

date -r "1475737200" -u 

Kommentarer

  • Tak. Jeg ' har redigeret det i det accepterede svar, så oplysningerne er lettere tilgængelige.

Svar

Svar på et gammelt spørgsmål, men jeg tror, det kan være en forbedring, hvis nogen andre søger efter dette. Denne Bash-funktion fungerer på både Linux og OS X. Jeg har ikke testet på andre BSD-systemer. Send epoken som et argument til denne funktion, og den udskriver 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 andet pænt eksempel på den moderne Unix rige arv. Dette er faktisk muligt under de fleste BSD-varianter:

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

(BTW dit eksempel synes at være slukket med et sekund)

Kommentarer

  • Fungerer ' ikke på Linux. hop ' s svar synes at have det korrekte Linux-svar. Tak for at påpege det, jeg formodede, at noget lignende ville ske, jeg ' har gjort det 45 sekunder nu.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *