Pertanyaan terkait adalah "Datetime To Unix timestamp" , tetapi pertanyaan ini lebih umum.
Saya perlu cap waktu Unix untuk menyelesaikan pertanyaan terakhir saya . Minat saya adalah Python, Ruby, dan Haskell, tetapi pendekatan lain dipersilakan.
Apa cara termudah untuk menghasilkan cap waktu Unix?
unix
unix-timestamp
Léo Léopold Hertz 준영
sumber
sumber
gettimeofday
adalah nama syscall POSIX dan Linux: stackoverflow.com/questions/11765301/... TODO: mengapastrace date +%d
tidak menyebutnya?Jawaban:
Di Linux atau MacOS Anda dapat menggunakan:
dimana
+%s
, detik sejak 1970-01-01 00:00:00 UTC. (GNU Coreutils 8.24 Tanggal manual)Contoh keluaran sekarang 1454000043.
sumber
date
yang biasanya didefinisikan dalam POSIX.2./usr/bin/date +%s and
/ usr / xpg4 / bin / date +% s` berfungsi. Digabungkan dengan rekomendasi POSIX.2, saya pikir ini juga berfungsi pada semua Solaris.date -v+60S +%s
untuk menambah 1 hari:date -v+24H +%s
dan seterusnya. . .dalam Ruby:
sumber
Time.zone.now.to_i
. Meskipun itu akan memberikan o / p yang sama sepertiTime.now.to)_i
tetapiTime.zone.now.to_i
adalahRails
caranya../bin/rails runner "p Time.current.to_i"
adalah solusi lain.Dalam python tambahkan baris berikut untuk mendapatkan cap waktu:
sumber
curl icanhazepoch.com
Pada dasarnya itu cap waktu unix sebagai layanan (UTaaS)
sumber
curl -L -H "Accept: application/json" unixtimesta.mp
akan memberi Anda{"datetime":"Thu, 19 Jul 2018 12:01:21 GMT","timestamp":1532001681}
Dalam Perl:
sumber
Perintah 'tanggal' unix sangat serbaguna.
Mengambil output dari
date
, yang akan berada dalam format yang ditentukan oleh -f, dan kemudian mencetaknya (-j mengatakan jangan mencoba untuk mengatur tanggal) dalam bentuk +% s, detik sejak zaman.sumber
date: invalid option -- 'j'
where (GNU Coreutils 8.24 Date manual)
+%s
, detik sejak 1970-01-01 00:00:00 UTC+%N
, nanoseconds (000000000..999999999) sejak zamanContoh output sekarang
1454000043.704350695
. Saya perhatikan bahwa manual BSDdate
tidak menyertakan penjelasan yang tepat tentang bendera+%s
.sumber
+$N
? Apakah itu termasuk dalam cap waktu UNIX di beberapa sistem?%N
tidak mendokumentasikan halaman manual untuk tanggal di macOS 10.13.1 (High Sierra) dan tidak berfungsi. Output sampel aku adalah:1523342391.N
.gdate
di Homebrew apple.stackexchange.com/a/135749/181223Pertama-tama, 'zaman' Unix atau zero-time adalah 1970-01-01 00: 00: 00Z (artinya tengah malam tanggal 1 Januari 1970 di zona waktu Zulu atau GMT atau UTC). Cap waktu Unix adalah jumlah detik sejak saat itu - bukan terhitung detik kabisat.
Menghasilkan waktu saat ini di Perl agak mudah:
Menghasilkan waktu yang sesuai dengan tanggal / nilai waktu yang diberikan agak kurang mudah. Secara logis, Anda menggunakan
strptime()
fungsi dari POSIX. Namun, modul Perl POSIX :: strptime (yang terpisah dari modul POSIX) memiliki tanda tangan:Fungsi
mktime
dalam modul POSIX memiliki tanda tangan:Jadi, jika Anda tahu format data Anda, Anda bisa menulis varian di:
sumber
Untuk kelengkapan, PHP:
Dalam BASH:
sumber
date
perintah, jadi saya pikir tidak perlu memanggil php dari sana.di Haskell
dalam Go
dalam C
di Swift
sumber
Di Haskell ...
Untuk mendapatkannya kembali sebagai tipe POSIXTime:
Sebagai bilangan bulat:
sumber
sumber
Mari kita coba JavaScript :
... atau bahkan lebih baik, pendekatan statis:
Dalam kedua kasus saya membagi dengan
1000
pergi dari detik ke millis dan saya gunakanMath.floor
untuk hanya mewakili seluruh detik yang telah berlalu (vs pembulatan, yang mungkin dibulatkan ke seluruh detik yang belum berlalu).sumber
milliseconds
bukan detik dan cap waktu unix adalah jumlahseconds
yang telah berlalu sejak 1 Januari 1970 00:00 UTC. Anda dapat menggunakan JS, cukup bagi 1000 dan bulat:Math.round(Date.now()/1000)
Math.floor
bukanMath.round
. CheersJika Anda memerlukan cap waktu Unix dari skrip shell (keluarga Bourne: sh, ksh, bash, zsh, ...), ini harus bekerja pada mesin Unix mana pun tidak seperti saran lainnya (perl, haskell, ruby, python, tanggal GNU) ), ini didasarkan pada perintah dan fitur standar POSIX.
sumber
Di Bash 5 ada variabel baru:
Atau jika Anda ingin presisi yang lebih tinggi (dalam mikrodetik):
sumber
Jika saya ingin mencetak waktu tanggal utc menggunakan perintah tanggal saya perlu menggunakan argumen -u dengan perintah tanggal.
Contoh
Keluaran
sumber
nawk:
sumber
Dengan NodeJS, cukup buka terminal dan ketik:
node -e "console.log(new Date().getTime())"
ataunode -e "console.log(Date.now())"
sumber