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 dateprogram OS X berbeda dari coreutils GNU dateProgram. Anda dapat menginstal coreutils (termasuk gnu-date), maka Anda akan memiliki versi dateyang 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.
datemenjadi GNU date(bukan gdate)
+%s.%Nformat 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 %Ndapat 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 +%skarena OS X tidak mendukung presisi lebih dari datekeluaran 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 $Ndiatur). Cukup gunakan date +%s000(atau date +%s.000jika Anda ingin titik desimal).
dateperintah OS X hanya lewat %-Nsebagai 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 pythonskrip langsung:
#!/usr/bin/python
from time import time
print int(round(time() * 1000))
gdatesudah diinstal di/usr/local/bin/gdate.