it-swarm-id.com

Bagaimana saya bisa mendapatkan tanggal yang diformat untuk cap waktu UNIX dari baris perintah

Saya memiliki cap waktu UNIX dan saya ingin mendapatkan tanggal yang diformat (seperti output date) yang sesuai dengan cap waktu itu.

Upaya saya sejauh ini:

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

Saya ingin bisa mendapatkan output seperti:

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

Di Mac OS X dan BSD:

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

dengan GNU alat inti (Anda harus Menggali file info untuk itu):

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

Dengan salah satunya, tambahkan -u pilihan (standar), atau meneruskan TZ=UTC0 variabel lingkungan untuk memiliki tanggal UTC (TZ=UTC0mendefinisikan zona waktu yang disebut UTC dengan offset 0 dari UTC sedangkan perilaku untuk TZ=UTC (tanpa offset) tidak ditentukan (meskipun pada sebagian besar sistem akan merujuk ke zona waktu yang ditentukan sistem juga disebut UTC dengan offset 0 dari UTC)).

98
user601

Perl one-liner ini akan melakukannya:

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

Setelah beberapa googling, saya menemukan cara untuk melakukannya hanya dengan perintah date:

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

Dengan builtin Shell:

  • zsh (4.1.1 (2003) dan lebih tinggi):

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

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

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

Dalam semua itu, ganti %c Dengan format strftime() yang Anda inginkan.

5

Jawab pertanyaan lama, tapi saya pikir ini mungkin perbaikan jika orang lain mencari ini. Fungsi Bash ini berfungsi pada Linux dan OS X. Saya belum menguji pada sistem BSD lainnya. Lewati waktu Epoch sebagai argumen untuk fungsi ini dan itu akan mencetak format waktu RFC-3339.

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

Di osx, ada di UTC

date -r "1475737200" -u
2
anyone

Contoh rapi lain dari kekayaan warisan Unix modern. Ini memang mungkin di bawah sebagian besar varian BSD:

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

(BTW contoh Anda tampaknya mati satu detik)

1
codehead