Minulla on UNIX-aikaleima ja haluaisin saada alustetun päivämäärän (kuten date
) -lähtö, joka vastaa kyseistä aikaleimaa.
Tähän mennessä tehdyt yritykseni:
$ 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"
Haluaisin saada tulosteen, kuten:
$ TZ=UTC somecommand 1282368345 Sat Aug 21 05:25:45 UTC 2010
Vastaa
Mac OS X: ssä ja BSD: ssä:
$ date -r 1282368345 Sat Aug 21 07:25:45 CEST 2010 $ date -r 1282368345 +%Y-%m-%d 2010-08-21
GNU-ydintyökaluilla (sinun on kaivettava sitä varten tietotiedosto):
$ date -d @1282368345 Sat Aug 21 07:25:45 CEST 2010 $ date -d @1282368345 --rfc-3339=date 2010-08-21
Lisää jommallakummalla vaihtoehto -u
(vakio) tai välitä TZ=UTC0
-ympäristömuuttuja, jolla on UTC-päivämäärä (TZ=UTC0
määrittelee aikavyöhykkeen nimeltä UTC
, jonka siirtymä on 0 UTC: stä kun taas TZ=UTC
-käyttäytymistä (ilman siirtymää) ei ole määritelty (vaikka useimmissa järjestelmissä viitattaisiin järjestelmän määrittelemään aikavyöhykettä kutsutaan myös nimellä UTC
, siirtymä 0 UTC: stä)).
Kommentit
Vastaa
Tämä perl-linjainen tekee sen:
$ perl -e "print scalar localtime $ARGV[0]" 1282367908 Sat Aug 21 09:18:28 2010
vastaus
Hieman Googlen selaamisen jälkeen löysin tavan tehdä se vain komento:
$ date --date "Jan 1, 1970 00:00:00 +0000 + 1282367908 seconds" Sat Aug 21 09:18:28 MSD 2010
kommentit
- Kiitos siitä. Toivoin ' d olevan jotain yksinkertaisempaa, joten vain äänestys toistaiseksi.
- toinen loistava esimerkki siitä, miten google tekee sinusta tyhmää. eikö kukaan koskaan lue dokumentaatiota enää?
- @hop,
date -d @xxx
-tukea lisättiin vasta coreutils 5.3: n kautta vuonna 2005. That ' s kuinka sinun piti tehdä se ennen sitä. - @St é phaneChazelas: a) tämä vastaus on vuodelta 2010 ja b) miksi tämä tapahtuu anteeksi googlata ennen asiakirjojen lukemista? Jos vastaat omalta viranomaiseltasi, voidaan puolustella tällaisten virheiden tekemistä, mutta jos sinun on silti etsittävä asiaa, etsi se oikein.
- @hop, huomautin vain, ettei se ollut tyhmä vastaus, vain vanhentunut.
Vastaa
Sisäisillä kuorilla:
-
zsh
(4.1.1 (2003) ja uudemmat):$ zmodload zsh/datetime $ TZ=UTC0 strftime %c 1282368345 Sat 21 Aug 2010 05:25:45 UTC
-
ksh93
(ksh93i
(2000) ja uudemmat):$ TZ=UTC0 printf "%(%c)T\n" "#1282368345" Sat Aug 21 05:25:45 2010
-
bash
(4.2 (2010) ja uudemmat):$ TZ=UTC0 printf "%(%c)T\n" 1282368345 Sat 21 Aug 2010 05:25:45 UTC
Korvaa kaikissa niissä %c
haluamallasi strftime()
-muodolla.
Kommentit
- Onko sinulla viitteitä
bash
printf
ratkaisu? - Ei koskaan, löysin sen
printf
: n kuvauksesta kohdasta gnu.org/software/bash/manual/bashref.html#Bash-Builtins .
vastaus
OSX: llä, UTC: ssä
date -r "1475737200" -u
Kommentit
- Kiitos. Olen ' muokannut sitä hyväksytyssä vastauksessa, jotta tiedot ovat helpommin saatavilla.
Vastaa
Vastaa vanhaan kysymykseen, mutta mielestäni tämä saattaa olla parannus, jos joku muu etsii sitä. Tämä Bash-toiminto toimii sekä Linuxissa että OS X: ssä. En ole testannut missään muussa BSD-järjestelmässä. Välitä aikakausi argumenttina tälle funktiolle ja se tulostaa RFC-3339-aikamuodon.
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 }
Vastaa
Toinen siisti esimerkki modernin Unixin rikkaasta perinnöstä. Tämä on todellakin mahdollista useimmissa BSD-muunnelmissa:
$ TZ=UTC date -r 1282368345 Sat Aug 21 05:25:45 UTC 2010
(BTW, jonka esimerkki näyttää olevan pois päältä sekunnilla)
Kommentit
- Ei toimi ' ei toimi Linuxissa. hop ' -vastauksella näyttää olevan oikea Linux-vastaus. Kiitos huomautuksesta, epäilin jotain sellaista tapahtuvan, olen ' tehnyt nyt 45 sekuntia.
info coreutils date
hieman huolellisemmin.date -r 1447264553943
tulokset kohdassaWed Dec 28 01:39:03 BRST 47831
, kun se ' on oikeastaan11/11/2015, 3:55:53 PM GMT-2:00
.