it-swarm-tr.com

Komut satırından UNIX zaman damgası için biçimlendirilmiş bir tarihi nasıl alabilirim

UNIX zaman damgası var ve bu zaman damgasına karşılık gelen biçimlendirilmiş bir tarih (date çıktısı gibi) almak istiyorum.

Şu ana kadar yaptığım girişimler:

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

Gibi çıktı almak mümkün olmak istiyorum:

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

Mac OS X ve BSD'de:

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

GNU temel araçlarla (bunun için bilgi dosyasını incelemeniz gerekir):

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

Her ikisiyle de -u (standart) seçenek veya bir TZ=UTC0 ortam değişkeni UTC tarihine sahip olmak için (TZ=UTC0tanımlarUTC adlı bir saat dilimi UTC'den 0 uzaklığı iken TZ=UTC (ofset olmadan) belirtilmemiş (ancak çoğu sistemde, UTC'den ofset 0 ile UTC olarak da adlandırılan sistem tanımlı bir saat dilimine başvurur)).

98
user601

Bu Perl tek astar bunu yapacak:

$ Perl -e 'print scalar localtime $ARGV[0]' 1282367908
Sat Aug 21 09:18:28 2010
6
AlexD

Bazı googling sonra, bunu sadece date komutuyla yapmanın yolunu buldum:

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

Shell yapılarıyla:

  • zsh (4.1.1 (2003) ve üstü):

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

    $ TZ=UTC0 printf '%(%c)T\n' '#1282368345'
    Sat Aug 21 05:25:45 2010
    
  • bash (4.2 (2010) ve üstü):

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

Bunların hepsinde, %c Yerine strftime() biçimini koyun.

5

Eski bir soruya cevap verin, ancak başka biri bunu ararsa bunun bir gelişme olabileceğini düşünüyorum. Bu Bash işlevi hem Linux hem de OS X üzerinde çalışır. Başka hiçbir BSD sisteminde test yapmadım. Epoch zamanını bu işleve bağımsız değişken olarak iletin ve RFC-3339 zaman biçimini yazdıracaktır.

epochtorfc3339 ()
{
    RFC3339_FORMAT="+%FT%T:::%z"
    Epoch=$(echo [email protected] | 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
}
2
Noah Spurrier

Osx'ta, UTC'de olmak

date -r "1475737200" -u
2
anyone

Modern Unix'in zengin mirasının bir başka düzgün örneği. Bu, çoğu BSD varyantı altında gerçekten mümkündür:

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

(BTW örneğiniz bir saniye kapalı gibi görünüyor)

1
codehead