Yanıtlar:
date +%s
dönemin üzerinden saniye sayısını döndürür .
date +%s%N
saniye ve geçerli nanosaniye değerini döndürür.
date +%s%N | cut -b1-13
Şimdiki saniye artı nanosaniyenin sol üçü - şimdiki zamandan bu yana milisaniye sayısını verecektir.
ve MikeyB'den - echo $(($(date +%s%N)/1000000))
(1000'e bölünmesi yalnızca mikrosaniye değerine ulaşır )
echo $(($(date +%s%N)/1000))
%3N
Nanosaniyeyi, en önemli 3 haneye (sonra milisaniye olan) kesmek için kullanabilirsiniz :
$ date +%s%3N
1397392146866
Bu, örneğin benim kubuntu 12.04 üzerinde çalışıyor.
Ancak %N
, hedef sisteminize bağlı olarak uygulanamayabileceğini unutmayın. Örneğin, gömülü bir sistemde test edilmiştir (HF olmayan bir kol çapraz alet zinciri kullanılarak derlenmiş kök kökler) %N
:
$ date +%s%3N
1397392146%3N
(Ayrıca benim (köklü olmayan) Android tabletim de yok %N
).
1397392146%3N
etmek 1397392146%N
, ancak çıkış 1397392146%3N
Gerçekten benim android tablet busybox konsolda gördüğü şey olmasıdır. Düzenlemenizi açıklayabilir misiniz?
date +%s.%3N
yazdırır 1510718281.134
.
date +%N
OS X üzerinde çalışmıyor, ancak bir tanesini kullanabilirsiniz.
ruby -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
node -e 'console.log(Date.now())'
php -r 'echo microtime(TRUE);'
wget -qO- http://www.timeapi.org/utc/now?\\s.\\N
date +%s000
coreutils
Harici programları çalıştırmayı önerenlerin ... ... bu saniyedeki mili saniyeyi ... ... alabilmelerini öneren insanlar için, şunu da yapabilirsin:
wget -qO- http://www.timeapi.org/utc/now?\\s.\\N
Olma noktası: buradan herhangi bir cevap seçmeden önce, lütfen tüm programların bir saniyenin altında çalışmayacağını unutmayın. Ölçmek, ölçü,,, tedbir, önlem!
date
çalışması 3 ms sürer.
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))'
Komut dosyanızın çalışma süresini görüntülemenin bir yolunu arıyorsanız, aşağıdakiler (tam olarak doğru değil) bir sonuç verecektir:
Komut dosyanızın başına olabildiğince yakın, aşağıdakini girin
basetime=$(date +%s%N)
Bu size 1361802943996000000 gibi bir başlangıç değeri verir.
Komut dosyanızın sonunda aşağıdakileri kullanın
echo "runtime: $(echo "scale=3;($(date +%s%N) - ${basetime})/(1*10^09)" | bc) seconds"
hangi gibi bir şey gösterecektir
runtime: 12.383 seconds
Notlar:
(1 * 10 ^ 09) isterseniz 1000000000 ile değiştirilebilir
"scale=3"
bc
İstediğinizi yapmaya zorlayan nadir bir ayardır . Çok daha fazlası var!
Bunu sadece Win7 / MinGW'de test ettim ... Elime uygun bir * nix kutum yok.
time <script>
İşte bölme yapmadan milisaniye cinsinden nasıl zaman alacağınız. Belki daha hızlıdır ...
# test=`date +%s%N`
# testnum=${#test}
# echo ${test:0:$testnum-6}
1297327781715
Güncelleme: Saf bashta sadece birlikte çalışan başka bir alternatif bash 4.2+
yukarıdaki ile aynıdır ancak printf
tarihi almak için kullanın . Kesinlikle daha hızlı olacak çünkü ana süreçten hiçbir işlem yapılmadı.
printf -v test '%(%s%N)T' -1
testnum=${#test}
echo ${test:0:$testnum-6}
Yine de buradaki diğer bir nokta, strftime
uygulamanızın desteklemesi gerektiği %s
ve %N
test makinemde geçerli olmayan hangisinin olduğu. man strftime
Desteklenen seçenekler için bkz . Ayrıca sözdizimini görmek man bash
için bkz printf
. -1
ve -2
zaman için özel değerlerdir.
strftime(3)
desteklemiyor %N
öylesine için hiçbir şekilde printf
nanosaniye yazdırmak için. Ubuntu 14.04 kullanıyorum.
date
daha güvenilir bir seçenek gibi görünüyor.
Alabileceğimiz en doğru zaman damgası (en azından Mac OS X için) muhtemelen şu şekildedir:
python -c 'import datetime; print datetime.datetime.now().strftime("%s.%f")'
1490665305.021699
Ancak, yayınlanmasının yaklaşık 30 milisaniye sürdüğünü unutmayın. 2 basamaklı kesir ölçeğine kadar kesebiliriz ve en başında zamanı okumanın ortalama ek yükünü hesaplayabilir ve ölçümden kaldırabiliriz. İşte bir örnek:
function getTimestamp {
echo `python -c 'import datetime; print datetime.datetime.now().strftime("%s.%f")' | cut -b1-13`
}
function getDiff {
echo "$2-$1-$MeasuringCost" | bc
}
prev_a=`getTimestamp`
acc=0
ITERATIONS=30
for i in `seq 1 $ITERATIONS`;do
#echo -n $i
a=`getTimestamp`
#echo -n " $a"
b=`echo "$a-$prev_a" | bc`
prev_a=$a
#echo " diff=$b"
acc=`echo "$acc+$b" | bc`
done
MeasuringCost=`echo "scale=2; $acc/$ITERATIONS" | bc`
echo "average: $MeasuringCost sec"
t1=`getTimestamp`
sleep 2
t2=`getTimestamp`
echo "measured seconds: `getDiff $t1 $t2`"
Nasıl çalıştığını daha iyi görmek için yankı komutlarını açabilirsiniz.
Bu betiğin sonuçları genellikle şu 3 sonuçtan biridir:
measured seconds: 1.99
measured seconds: 2.00
measured seconds: 2.01
Date ve expr kullanmak sizi oraya götürebilir.
X=$(expr \`date +%H\` \\* 3600 + \`date +%M\` \\* 60 + \`date +%S\`)
echo $X
Sadece ne istersen onu yap.
Bunun, çağdan beri milisaniye vermediğini fark ettim, ancak bazı durumlarda cevap olarak hala yararlı olabilir, hepsi için neye ihtiyaç duyduğunuza bağlı olarak, bir milisaniye sayısına ihtiyacınız varsa, 1000 ile çarpın: D
En basit yöntem, küçük bir çalıştırılabilir yapmak (Cf.ex. den) ve betiğin kullanımına sunmaktır.
date
Birden çok kez çalışan potansiyel bir sorun var . Bazı durumlarda, tarih veya saat komutunuz yazıldıkça çalıştırmalar arasında değişebilir. Bir date
kere kaçıp parçalarını parçalayıp hesaplarını yapmak daha iyi olur . Bunu yapmanın birkaç yolundan biri olurdu t=$(date +%H%M%S); (( x = ${t:0:2} * 3600 + ${t:2:2} * 60 + ${t:4:2} )); echo "$x"
. Bu soru bash olarak etiketlendiğinden Bash sözdizimini kullanır . Sizlerin aldattığınız gibi, cevabınız (ve varyasyonum) değirmende değil, Epoch'tan bu yana değil, şimdiki gün için yalnızca birkaç saniye verir.
(yukarıdan tekrarlayın) date +%N
OS X üzerinde çalışmıyor, ancak şunları da kullanabilirsiniz:
Perl (Zaman :: Format modülü gerektirir). Muhtemelen kullanılabilecek en iyi CPAN modülü değildir, ancak işi yapar. Time :: Format genellikle dağıtımlarda kullanılabilir duruma gelir.
perl -w -e'use Time::Format; printf STDOUT ("%s.%s\n", time, $time{"mmm"})'
date
kullanılamaz ve ihtiyaca cevap veren sadece bash komutları yoktur.
date
olarak kullanılamadığını açıklamak isteseydiniz, oyumun altındaki oyu kaldırırdım.
OSX'deyken önceki yanıtları bir araya getirmek
ProductName: Mac OS X
ProductVersion: 10.11.6
BuildVersion: 15G31+
beğenebilirsin
microtime() {
python -c 'import time; print time.time()'
}
compute() {
local START=$(microtime)
#$1 is command $2 are args
local END=$(microtime)
DIFF=$(echo "$END - $START" | bc)
echo "$1\t$2\t$DIFF"
}
Basit bir kabuk geçen hesaplama istiyorsanız, yukarıdaki cevabı kullanarak bu kolay ve taşınabilir:
now() {
python -c 'import datetime; print datetime.datetime.now().strftime("%s.%f")'
}
seismo:~$ x=`now`
seismo:~$ y=`now`
seismo:~$ echo "$y - $x" | bc
5.212514
Alp linux (birçok liman işçisi resmi) ve muhtemelen kötüye kullanabileceğiniz diğer minimal linux ortamları için adjtimex
:
adjtimex | awk '/(time.tv_usec):/ { printf("%06d\n", $2) }' | head -c3
adjtimex
çekirdek zaman değişkenlerini okumak (ve ayarlamak) için kullanılır. İle awk
birlikte size, mikrosaniye alabilirsiniz head
sadece ilk 3 rakamını kullanabilirsiniz.
Bu komutun ne kadar güvenilir olduğu hakkında hiçbir fikrim yok.
Not: Bu cevaptan utanmadan çalındı