Bagaimana saya mendapatkan waktu sejak zaman, dalam milidetik, di terminal OSX?
Setara Linux / Ubuntu adalah date +%s.%N
:
Linux $ date +%s.%N
1403377762.035521859
Yang tidak berfungsi di terminal OSX saya:
OSX $ date +%s.%N
1403377800.N
Bagaimana saya mendapatkan waktu sejak zaman, dalam milidetik, di terminal OSX?
Setara Linux / Ubuntu adalah date +%s.%N
:
Linux $ date +%s.%N
1403377762.035521859
Yang tidak berfungsi di terminal OSX saya:
OSX $ date +%s.%N
1403377800.N
Jawaban:
The date
program OS X berbeda dari coreutils GNU date
Program. Anda dapat menginstal coreutils (termasuk gnu-date), maka Anda akan memiliki versi date
yang mendukung milidetik.
Karena penginstalan dari sumber dapat merepotkan bagi pengguna OS X asli, saya menyarankan Anda untuk menggunakan Homebrew .
Untuk menginstal alat ini menggunakan Homebrew, jalankan oneliner ini di terminal Anda:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Homebrew sekarang terinstal (sebaiknya mengikuti saran penginstal setelah instalasi). Sekarang kita akan menginstal coreutils menggunakan brew
.
brew install coreutils
Seperti yang dikatakan dalam instalasi, semua perintah telah diinstal dengan awalan 'g' (mis. Gdate, gcat, gln, dll.). Jika Anda benar-benar perlu menggunakan perintah ini dengan nama normalnya, Anda dapat menambahkan direktori "gnubin" ke PATH Anda ( ~/.bash_profile
) seperti:
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
Anda sekarang dapat berlari
gdate +%s.%N
dan ini akan menampilkan waktu Anda sejak zaman dalam milidetik.
date
menjadi GNU date
(bukan gdate)
+%s.%N
format memberikan detik ke presisi nanodetik, bukan milidetik. Setelah saya menggunakan minuman untuk menginstal gdate
, saya memeriksa halaman manual untuk melihat apakah milidetik tersedia. Ini bukan. Itu juga tidak mengatakan bahwa presisi untuk %N
dapat ditentukan, tetapi saya tetap mencobanya. Saya menemukan bahwa perintah untuk mendapatkan detik ke presisi milidetik saja (yaitu, tiga tempat desimal) adalah gdate +%s.%3N
.
Di OS X, jalankan saja date +%s
karena OS X tidak mendukung presisi lebih dari date
keluaran in ini dan kelebihan kelebihan yang tidak didukung oleh representasi internal terpotong ke minus minus.
Jika Anda ingin output milidetik, Anda dapat menggunakan perintah berikut, meskipun output hanya dikoreksi dengan menambahkan nol daripada menambahkan presisi karena alasan yang disebutkan di atas. Berikut ini tidak menghasilkan milidetik yang benar pada sistem yang mendukung presisi yang diperlukan.
echo $(($(date +'%s * 1000 + %-N / 1000000')))
Sumber untuk perintah di atas: Unix.SE - Cara mendapatkan milidetik sejak zaman Unix
Jika Anda hanya ingin perintah yang menambahkan jumlah nol yang tepat di OS X, Anda dapat menggunakan:
date +%s000
%-N
, sehingga tidak melakukan apa-apa (dan dapat menyebabkan masalah jika variabel shell $N
diatur). Cukup gunakan date +%s000
(atau date +%s.000
jika Anda ingin titik desimal).
date
perintah OS X hanya lewat %-N
sebagai N
, itu dapat mengganggu perhitungan. Coba pengaturan N=7000000000000000000
, lalu coba perintah ... Ini adalah kasus yang tidak mungkin dalam praktek, tetapi saya akan merasa lebih aman dengan sesuatu yang tidak bergantung pada lingkungan.
solusi ini berfungsi pada macOS.
jika Anda mempertimbangkan untuk menggunakan skrip bash dan memiliki python tersedia, Anda dapat menggunakan kode ini:
#!/bin/bash
python -c 'from time import time; print int(round(time() * 1000))'
Atau tulis python
skrip langsung:
#!/usr/bin/python
from time import time
print int(round(time() * 1000))
gdate
sudah diinstal di/usr/local/bin/gdate
.