Kuinka saan alustetun päivämäärän UNIX-aikaleimalle komentoriviltä

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

  • Se vie paljon kaivamisen, mikä on yllättävää niin yleisen tehtävän kannalta.
  • Kiitos, hyväksy vastauksesi. Minun olisi pitänyt lukea info coreutils date hieman huolellisemmin.
  • Tämä antaa minulle hieman erilaisen päivämäärän: date -r 1447264553943 tulokset kohdassa Wed Dec 28 01:39:03 BRST 47831, kun se ' on oikeastaan 11/11/2015, 3:55:53 PM GMT-2:00.
  • @falmp: se toimii, jos käytät sekunteja mikrosekuntien sijaan.
  • @hop ops, olisi pitänyt ajatella, että vuosi on 47831, mutta luku oli niin suuri, että kaipasin sitä. Kiitos!

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

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.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *