OSX terminalinde dönemin milisaniye cinsinden zamanını nasıl alabilirim?
Linux / Ubuntu eşdeğeri date +%s.%N
:
Linux $ date +%s.%N
1403377762.035521859
OSX terminalimde çalışmıyor:
OSX $ date +%s.%N
1403377800.N
OSX terminalinde dönemin milisaniye cinsinden zamanını nasıl alabilirim?
Linux / Ubuntu eşdeğeri date +%s.%N
:
Linux $ date +%s.%N
1403377762.035521859
OSX terminalimde çalışmıyor:
OSX $ date +%s.%N
1403377800.N
Yanıtlar:
date
OS X programı GNU coreutils farklıdır date
programı. Coreutils (gnu-date dahil) kurabilirsiniz, o zaman date
milisaniyeyi destekleyen bir versiyona sahip olacaksınız .
Kaynaktan kurulum yerel OS X kullanıcıları için bir güçlük olabileceğinden, Homebrew'i kullanmanızı tavsiye ediyorum .
Bu araçları Homebrew kullanarak kurmak için terminalinizde bu oneliner'ı çalıştırın:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Homebrew şimdi kuruldu (kurulumdan sonra kurulum önerilerini takip etmek akıllıca olacaktır). Şimdi kullanarak coreutils kuracağız brew
.
brew install coreutils
Kurulumun dediği gibi, tüm komutlar 'g' ön ekiyle yüklenmiştir (örn. Gdate, gcat, gln, etc, vb.). Bu komutları gerçekten normal adlarıyla kullanmanız gerekiyorsa, PATH ( ~/.bash_profile
) öğesine bir "gnubin" dizini ekleyebilirsiniz :
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
Şimdi koşabilirsin
gdate +%s.%N
ve bu, milisaniye cinsinden çağdan beri zamanınızı gösterecektir.
date
, GNU olur date
(yerine gdate ait)
+%s.%N
format saniye cinsinden değil, nanosaniye hassasiyetine kadar saniye verir. Demlemek için kullandıktan sonra gdate
, milisaniyenin kullanılabilir olup olmadığını görmek için manpage'i kontrol ettim. Değil. Ayrıca kesin %N
olarak belirtilebileceğini söylemedi , ama yine de denedim. Saniyeyi yalnızca milisaniye hassasiyetine indirgeme komutunun (yani üç ondalık basamak) olduğunu buldum gdate +%s.%3N
.
OS X'te, sadece date +%s
OS X'in date
çıktısından bundan daha fazla hassasiyeti desteklemediği ve dahili gösterimle desteklenmeyen fazla hassasiyetin eksi sonsuzluğa indirildiği kesin olarak çalışmaktadır.
Milisaniye çıktı istiyorsanız, yukarıda belirtilen nedenlerden dolayı hassasiyet eklemek yerine yalnızca sıfır ekleyerek düzeltilse de, aşağıdaki komutu kullanabilirsiniz. Aşağıdakiler, gerekli hassasiyeti destekleyen sistemlerde doğru milisaniyeyi gösterir.
echo $(($(date +'%s * 1000 + %-N / 1000000')))
Yukarıdaki komutun kaynağı: Unix.SE - Unix döneminden beri milisaniye nasıl elde edilir
Yalnızca OS X'te doğru sayıda sıfır ekleyen bir komut istiyorsanız, kullanabilirsiniz:
date +%s000
%-N
, bu yüzden hiçbir şey yapmıyor (ve kabuk değişkeni $N
ayarlanmışsa soruna neden olabilir ). Sadece kullanın date +%s000
(veya date +%s.000
ondalık noktayı istiyorsanız).
date
komut sadece geçer %-N
olarak aracılığıyla N
, bu hesaplama engelleyebilir. Ayarlamayı deneyin N=7000000000000000000
, sonra komutu deneyin ... Pratikte bu pek olası bir durum değil, ancak çevreye bağlı olmayan bir şeyle daha güvende hissederim.
bu çözüm macOS'ta çalışır.
bash betiği kullanmayı düşünüyorsanız ve python'unuz varsa, şu kodu kullanabilirsiniz:
#!/bin/bash
python -c 'from time import time; print int(round(time() * 1000))'
Veya python
doğrudan bir komut dosyası yazın:
#!/usr/bin/python
from time import time
print int(round(time() * 1000))
gdate
monte edilmiştir/usr/local/bin/gdate
.