Ik heb een UNIX-tijdstempel en ik “zou graag een opgemaakte datum willen krijgen (zoals de uitvoer van date
) die overeenkomt met dat tijdstempel.
Mijn pogingen tot dusver:
$ 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"
Ik “zou graag output willen krijgen zoals:
$ TZ=UTC somecommand 1282368345 Sat Aug 21 05:25:45 UTC 2010
Antwoord
Op Mac OS X en BSD:
$ date -r 1282368345 Sat Aug 21 07:25:45 CEST 2010 $ date -r 1282368345 +%Y-%m-%d 2010-08-21
met GNU-kerntools (daarvoor moet je het informatiebestand doorzoeken):
$ date -d @1282368345 Sat Aug 21 07:25:45 CEST 2010 $ date -d @1282368345 --rfc-3339=date 2010-08-21
Voeg met een van beide de -u
(standaard) optie toe, of geef een TZ=UTC0
omgevingsvariabele om de UTC-datum te hebben (TZ=UTC0
definieert een tijdzone genaamd UTC
met offset 0 van UTC terwijl het gedrag voor TZ=UTC
(zonder offset) niet gespecificeerd is (hoewel op de meeste systemen zou verwijzen naar een door het systeem gedefinieerde tijdzone ook wel UTC
genoemd met offset 0 van UTC)).
Reacties
Answer
Deze perl one-liner zal het doen:
$ perl -e "print scalar localtime $ARGV[0]" 1282367908 Sat Aug 21 09:18:28 2010
Antwoord
Na wat googelen vond ik een manier om het te doen met de date
alleen commando:
$ date --date "Jan 1, 1970 00:00:00 +0000 + 1282367908 seconds" Sat Aug 21 09:18:28 MSD 2010
Reacties
- Bedankt daarvoor. Ik hoopte dat ' iets eenvoudiger zou zijn, dus voor nu even een stem omhoog.
- nog een geweldig voorbeeld van hoe Google je stom maakt. leest niemand de documentatie ooit meer?
- @hop, ondersteuning voor
date -d @xxx
werd niet toegevoegd tot coreutils 5.3 in 2005. Dat ' s hoe je het daarvoor moest doen. - @St é phaneChazelas: a) dit antwoord is uit 2010 en b) waarom doet dit excuus googlen voordat u de documentatie leest? Als je antwoordt vanuit je eigen autoriteit, kan je je excuses aanbieden als je zulke fouten maakt, maar als je het toch moet opzoeken, zoek het dan goed op.
- @hop, ik wees er net op dat het niet zo was een stom antwoord, alleen een verouderd antwoord.
Antwoord
Met ingebouwde shell:
-
zsh
(4.1.1 (2003) en hoger):$ zmodload zsh/datetime $ TZ=UTC0 strftime %c 1282368345 Sat 21 Aug 2010 05:25:45 UTC
-
ksh93
(ksh93i
(2000) en hoger):$ TZ=UTC0 printf "%(%c)T\n" "#1282368345" Sat Aug 21 05:25:45 2010
-
bash
(4.2 (2010) en hoger):$ TZ=UTC0 printf "%(%c)T\n" 1282368345 Sat 21 Aug 2010 05:25:45 UTC
Vervang in al deze %c
door de strftime()
indeling die u wilt.
Reacties
- Heeft u een referentie voor de
bash
printf
oplossing? - Laat maar, ik vond het in de beschrijving van
printf
in gnu.org/software/bash/manual/bashref.html#Bash-Builtins .
Antwoord
Op osx, om in UTC te hebben
date -r "1475737200" -u
Reacties
- Bedankt. Ik ' heb dat in het geaccepteerde antwoord bewerkt, zodat de informatie gemakkelijker beschikbaar is.
Antwoord
Antwoord op een oude vraag, maar ik denk dat dit een verbetering kan zijn als iemand anders hiernaar zoekt. Deze Bash-functie werkt op zowel Linux als OS X. Ik heb niet getest op andere BSD-systemen. Geef de epoch-tijd als een argument door aan deze functie en het zal het RFC-3339-tijdformaat afdrukken.
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 }
Answer
Nog een mooi voorbeeld van de rijke erfenis van de moderne Unix. Dit is inderdaad mogelijk onder de meeste BSD-varianten:
$ TZ=UTC date -r 1282368345 Sat Aug 21 05:25:45 UTC 2010
(Uw voorbeeld lijkt trouwens een seconde te verschillen)
Opmerkingen
- Werkt niet ' op Linux. hop ' s antwoord lijkt het juiste Linux antwoord te hebben. Bedankt dat je erop hebt gewezen, ik vermoedde dat zoiets zou gebeuren, ik ' heb het nu 45 seconden gemaakt.
info coreutils date
wat zorgvuldiger moeten lezen.date -r 1447264553943
resultaten inWed Dec 28 01:39:03 BRST 47831
, wanneer het ' eigenlijk11/11/2015, 3:55:53 PM GMT-2:00
is.