Bagaimana saya mendapatkan waktu Unix saat ini dalam milidetik (yaitu jumlah milidetik sejak Unix, 1 Januari 1970)?
232
date +%s
akan mengembalikan jumlah detik sejak zaman.
date +%s%N
mengembalikan detik dan nanodetik saat ini.
date +%s%N | cut -b1-13
akan memberi Anda jumlah milidetik sejak zaman - detik saat ini ditambah tiga nanodetik.
dan dari MikeyB - echo $(($(date +%s%N)/1000000))
(membaginya dengan 1000 hanya membawa ke microseconds)
echo $(($(date +%s%N)/1000))
Anda cukup menggunakan
%3N
untuk memotong nanodetik ke 3 digit paling signifikan (yang kemudian menjadi milidetik):Ini berfungsi misalnya pada kubuntu saya 12,04.
Namun ketahuilah, itu
%N
mungkin tidak diterapkan tergantung pada sistem target Anda. Misalnya diuji pada sistem tertanam (rootro buildroot, dikompilasi menggunakan toolchain lintas lengan non-HF) tidak ada%N
:(Dan juga tablet Android saya (yang tidak di-rooting) tidak memiliki
%N
).sumber
1397392146%3N
untuk1397392146%N
, tetapi output1397392146%3N
adalah bahwa apa yang saya benar-benar akan terlihat pada konsol busybox tablet android saya. Bisakah Anda menjelaskan hasil edit Anda?date +%s.%3N
cetakan1510718281.134
.date +%N
tidak berfungsi pada OS X, tetapi Anda dapat menggunakannyaruby -e 'puts Time.now.to_f'
python -c 'import time; print time.time()'
node -e 'console.log(Date.now())'
php -r 'echo microtime(TRUE);'
DateTime.utc_now() |> DateTime.to_unix(:millisecond)
wget -qO- http://www.timeapi.org/utc/now?\\s.\\N
date +%s000
sumber
node -e 'console.log(Date.now())'
php -r 'echo microtime(TRUE);'
wget -qO- http://www.timeapi.org/utc/now?\\s.\\N
date +%s000
coreutils
Hanya melempar ini ke luar, tapi saya pikir formula yang tepat dengan divisi adalah:
sumber
Solusi saya bukan yang terbaik tetapi bekerja untuk saya.
date +%s000
Saya hanya perlu mengonversi tanggal seperti 2012-05-05 ke milidetik.
sumber
Bagi orang yang menyarankan menjalankan program eksternal untuk mendapatkan mili detik ... pada tingkat itu, Anda sebaiknya melakukan ini:
Poinnya adalah: sebelum memilih jawaban apa pun dari sini, harap diingat bahwa tidak semua program akan berjalan dalam satu detik penuh. Mengukur!
sumber
date
membutuhkan 3 ms untuk dijalankan.solusi ini berfungsi pada macOS.
jika Anda mempertimbangkan untuk menggunakan skrip bash dan memiliki python tersedia, Anda bisa menggunakan kode ini:
sumber
Jika Anda mencari cara untuk menampilkan berapa lama skrip Anda berjalan, yang berikut ini akan memberikan hasil (tidak sepenuhnya akurat):
Sedekat awal skrip Anda, masukkan yang berikut ini
basetime=$(date +%s%N)
Ini akan memberi Anda nilai awal dari sesuatu seperti 1361802943996000000
Di akhir skrip Anda, gunakan yang berikut ini
echo "runtime: $(echo "scale=3;($(date +%s%N) - ${basetime})/(1*10^09)" | bc) seconds"
yang akan menampilkan sesuatu seperti
runtime: 12.383 seconds
Catatan:
(1 * 10 ^ 09) dapat diganti dengan 1000000000 jika diinginkan
"scale=3"
adalah pengaturan yang agak jarang yang memaksabc
untuk melakukan apa yang Anda inginkan. Masih banyak lagi!Saya hanya menguji ini pada Win7 / MinGW ... Saya tidak memiliki kotak * nix yang tepat.
sumber
time <script>
Inilah cara mendapatkan waktu dalam milidetik tanpa melakukan pembagian. Mungkin lebih cepat ...
Pembaruan: Alternatif lain dalam bash murni yang hanya berfungsi
bash 4.2+
sama dengan di atas tetapi digunakanprintf
untuk mendapatkan tanggal. Ini pasti akan lebih cepat karena tidak ada proses yang dihapus dari yang utama.Tangkapan lain di sini adalah bahwa
strftime
implementasi Anda harus mendukung%s
dan%N
yang BUKAN terjadi pada mesin uji saya. Lihatman strftime
opsi yang didukung. Lihat jugaman bash
untuk melihatprintf
sintaks.-1
dan-2
merupakan nilai khusus untuk waktu.sumber
strftime(3)
tidak mendukung%N
jadi tidak ada cara untukprintf
mencetak nanodetik. Saya menggunakan Ubuntu 14.04.date
sepertinya pilihan yang lebih bisa diandalkan.Stempel waktu paling akurat yang bisa kita dapatkan (setidaknya untuk Mac OS X) mungkin ini:
Tetapi kita harus ingat bahwa dibutuhkan sekitar 30 milidetik untuk berjalan. Kita dapat memotongnya menjadi skala fraksi 2 digit, dan pada mulanya menghitung rata - rata overhead membaca waktu, dan kemudian menghapusnya dari pengukuran. Berikut ini sebuah contoh:
Anda dapat menghapus komentar perintah gema untuk melihat lebih baik cara kerjanya.
Hasil untuk skrip ini biasanya adalah salah satu dari 3 hasil ini:
sumber
Menggunakan tanggal dan expr dapat membawa Anda ke sana yaitu
Perluas untuk melakukan apa pun yang Anda inginkan
Saya menyadari ini tidak memberikan milidetik sejak zaman, tetapi mungkin masih berguna sebagai jawaban untuk beberapa kasus, itu semua tergantung pada apa yang Anda butuhkan, kalikan dengan 1000 jika Anda memerlukan nomor milidetik: D
Cara paling sederhana adalah dengan membuat executable kecil (dari C f.ex.) dan membuatnya tersedia untuk skrip.
sumber
date
beberapa kali. Dalam beberapa kasus, tanggal atau waktu dapat berubah antar berjalan saat perintah Anda ditulis. Lebih baik dijalankandate
sekali dan parsing bagian-bagian keluar dan lakukan perhitungan Anda. Salah satu dari beberapa cara untuk melakukannya adalaht=$(date +%H%M%S); (( x = ${t:0:2} * 3600 + ${t:2:2} * 60 + ${t:4:2} )); echo "$x"
. Ini menggunakan sintaks Bash karena pertanyaannya ditandai bash . Seperti yang Anda singgung, jawaban Anda (dan variasi saya) hanya memberikan detik untuk hari ini sejauh ini dan bukan sejak Zaman dan bukan dalam milis.(ulangi dari atas)
date +%N
tidak berfungsi pada OS X, tetapi Anda juga dapat menggunakan:Perl (membutuhkan modul Time :: Format). Mungkin bukan modul CPAN terbaik untuk digunakan tetapi menyelesaikan pekerjaan. Waktu :: Format umumnya tersedia dengan distribusi.
sumber
date
tidak dapat digunakan dan tidak ada perintah bash-only yang menjawab kebutuhan.date
tidak dapat digunakan sebagai bagian dari jawaban Anda , saya akan menghapus downvote saya.Menyatukan semua respons sebelumnya, saat berada di OSX
Anda bisa suka
sumber
Jika Anda menginginkan perhitungan shell yang sederhana, ini mudah dan portabel, menggunakan jawaban di atas:
sumber
Untuk alpine linux (banyak gambar buruh pelabuhan) dan mungkin lingkungan linux minimal lainnya, Anda dapat menyalahgunakan
adjtimex
:adjtimex
digunakan untuk membaca (dan mengatur) variabel waktu kernel. Denganawk
Anda bisa mendapatkan mikrodetik, denganhead
Anda dapat menggunakan 3 digit pertama saja.Saya tidak tahu seberapa andal perintah ini.
Catatan: Tanpa malu-malu dicuri dari jawaban ini
sumber