Apakah ada cara cepat satu baris untuk mengonversi stempel waktu Unix menjadi tanggal dari baris perintah Unix?
date
mungkin berhasil, kecuali agak canggung untuk menentukan setiap elemen (bulan, hari, tahun, jam, dll.), dan saya tidak tahu bagaimana membuatnya berfungsi dengan baik. Sepertinya ada cara yang lebih mudah - apakah saya melewatkan sesuatu?
bash
shell
unix
unix-timestamp
chimeracoder.dll
sumber
sumber
Jawaban:
Dengan GNU,
date
Anda dapat melakukan:(Dari: BASH: Ubah Stempel Waktu Unix menjadi Tanggal )
Di OS X, gunakan
date -r
.Alternatifnya, gunakan
strftime()
. Ini tidak tersedia langsung dari shell, tetapi Anda dapat mengaksesnya melalui gawk . The%c
specifier menampilkan timestamp secara lokal tergantung.sumber
date -d @1278999698 +'%Y-%m-%d %H:%M:%S'
Dimana angka dibelakang@
adalah angka dalam hitungan detiksumber
date -r 1278999698 +'%Y-%m-%d %H:%M:%S'
(GMT) atau sederhananyadate -r 1278999698
Solusi ini berfungsi dengan versi tanggal yang tidak mendukung
date -d @
. Itu tidak membutuhkan AWK atau perintah lainnya. Stempel waktu Unix adalah jumlah detik sejak 1 Jan 1970, UTC, jadi penting untuk menentukan UTC.Jika Anda menggunakan Mac, gunakan:
Perintah untuk mendapatkan epoch:
Kredit diberikan kepada Anton: BASH: Ubah Stempel Waktu Unix menjadi Tanggal
sumber
Seperti yang dikatakan @TomMcKenzie dalam komentar untuk jawaban lain,
date -r 123456789
ini bisa dibilang solusi sederhana yang lebih umum (yaitu lebih banyak diterapkan) untuk waktu yang diberikan sebagai detik sejak Unix Epoch, tetapi sayangnya tidak ada solusi portabel yang dijamin universal.The
-d
pilihan pada banyak jenis sistem berarti sesuatu yang sama sekali berbeda dari GNU Date--date
ekstensi. Sayangnya Tanggal GNU tidak ditafsirkan-r
sama dengan implementasi lainnya. Jadi sayangnya Anda harus tahu versi mana yangdate
Anda gunakan, dan banyakdate
perintah Unix yang lebih lama tidak mendukung opsi mana pun.Lebih buruk lagi, POSIX
date
tidak mengenali-d
atau-r
dan tidak menyediakan cara standar dalam perintah apa pun (yang saya ketahui) untuk memformat waktu Unix dari baris perintah (karena POSIX Awk juga kekuranganstrftime()
). (Anda tidak dapat menggunakantouch -t
danls
karena yang pertama tidak menerima waktu yang diberikan sebagai detik sejak Unix Epoch.)Perhatikan meskipun The One True Awk tersedia langsung dari Brian Kernighan sekarang memiliki
strftime()
fungsi built-in sertasystime()
fungsi untuk mengembalikan waktu saat ini dalam hitungan detik sejak Unix Epoch), jadi mungkin solusi Awk adalah yang paling portabel.sumber
Jika Anda merasa notasinya canggung, mungkin
-R
opsi-bisa membantu. Ini melebihi tanggal dalam format RFC 2822. Jadi Anda tidak perlu semua pengenal mereka:date -d @1278999698 -R
. Kemungkinan lain adalah untuk output tanggal dalam detik di tempat Anda:date -d @1278999698 +%c
. Harus mudah diingat. :-)sumber
Koreksi sedikit untuk jawaban dabest1 di atas. Tentukan zona waktu sebagai UTC, bukan GMT:
Yang kedua benar. Saya pikir alasannya adalah bahwa di Inggris, pergeseran waktu siang hari berlaku terus menerus dari tahun 1968 hingga 1971.
sumber
Solusi Perl standar adalah:
(atau waktu lokal, jika disukai)
sumber
sumber
Contoh lain di sini sulit untuk diingat. Paling sederhana:
sumber
Letakkan yang berikut ini di ~ / .bashrc Anda:
Contoh penggunaan:
sumber
Python:
sumber