回答:
date +%s
エポックからの秒数を返します。
date +%s%N
秒と現在のナノ秒を返します。
date +%s%N | cut -b1-13
エポックからのミリ秒数、つまり現在の秒とナノ秒の左の3つを示します。
とMikeyBから- echo $(($(date +%s%N)/1000000))(1000で除算するとマイクロ秒になります)
echo $(($(date +%s%N)/1000))
%3Nナノ秒を最上位3桁(ミリ秒)に切り捨てるために単に使用できます。
$ date +%s%3N
1397392146866
これは、たとえばkubuntu 12.04で機能します。
ただし%N、ターゲットシステムによっては実装されない場合があります。たとえば、組み込みシステム(buildroot rootfs、非HFアームクロスツールチェーンを使用してコンパイル)でテストされたものはありませんでした%N。
$ date +%s%3N
1397392146%3N
(また、私の(ルート化されていない%N)Androidタブレットにはない)。
1397392146%3Nに1397392146%N、しかしの出力は1397392146%3N、私は本当に私のAndroidタブレットのbusyboxのコンソール上で見たいものをということです。編集について説明してください。
date +%s.%3N印刷し1510718281.134ます。
date +%N OS Xでは動作しませんが、次のいずれかを使用できます
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.\\Ndate +%s000node -e 'console.log(Date.now())'
php -r 'echo microtime(TRUE);'
wget -qO- http://www.timeapi.org/utc/now?\\s.\\N
date +%s000
coreutils
外部プログラムを実行してミリ秒を取得することを提案する人々のために...その速度で、あなたもこれをするかもしれません:
wget -qO- http://www.timeapi.org/utc/now?\\s.\\N
ポイント:ここから答えを選ぶ前に、すべてのプログラムが1秒未満で実行されるわけではないことに注意してください。測定してください!
date実行に3ミリ秒かかります。
このソリューションはmacOSで動作します。
bashスクリプトの使用を検討し、Pythonを使用できる場合は、次のコードを使用できます。
#!/bin/bash
python -c 'from time import time; print int(round(time() * 1000))'
スクリプトが実行された時間の長さを表示する方法を探している場合、以下は(完全に正確ではない)結果を提供します。
できるだけスクリプトの冒頭近くで、次のように入力します
basetime=$(date +%s%N)
これにより、1361802943996000000のような初期値が得られます。
スクリプトの最後で、次を使用します
echo "runtime: $(echo "scale=3;($(date +%s%N) - ${basetime})/(1*10^09)" | bc) seconds"
のようなものが表示されます
runtime: 12.383 seconds
ノート:
(1 * 10 ^ 09)は、必要に応じて1000000000に置き換えることができます
"scale=3"bcあなたがしたいことをするように強制するかなりまれな設定です。さらにたくさんあります!
これはWin7 / MinGWでのみテストしました...適切な* nixボックスが手元にありません。
time <script>
除算を行わずにミリ秒単位で時間を取得する方法を次に示します。たぶんもっと速い...
# test=`date +%s%N`
# testnum=${#test}
# echo ${test:0:$testnum-6}
1297327781715
更新:でのみ動作する純粋なbashの別の代替 bash 4.2+上記と同じですがprintf、日付の取得に使用されます。メインプロセスから分岐するプロセスがないため、確実に高速になります。
printf -v test '%(%s%N)T' -1
testnum=${#test}
echo ${test:0:$testnum-6}
別の漁獲量はここにかかわらず、あなたのことですstrftime実装がサポートしなければならない%sと%Nされ、私のテストマシン上のケースではありません。man strftimeサポートされているオプションを参照してください。構文も参照man bashしてくださいprintf。-1および-2は、時間の特別な値です。
strftime(3)がサポートしていないように思える%Nので、printfナノ秒を印刷する方法はありません。Ubuntu 14.04を使用しています。
dateより信頼性の高いオプションのようです。
取得できる最も正確なタイムスタンプ(少なくともMac OS Xの場合)は、おそらく次のとおりです。
python -c 'import datetime; print datetime.datetime.now().strftime("%s.%f")'
1490665305.021699
ただし、実行には約30ミリ秒かかることに留意する必要があります。これを2桁の小数のスケールにカットし、最初に平均オーバーヘッドを計算します時間を読み取るをてから、測定値から削除します。以下に例を示します。
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`"
echoコマンドのコメントを外すと、どのように機能するかを確認できます。
このスクリプトの結果は通常、次の3つの結果のいずれかです。
measured seconds: 1.99
measured seconds: 2.00
measured seconds: 2.01
dateとexprを使用すると、そこに到達できます。
X=$(expr \`date +%H\` \\* 3600 + \`date +%M\` \\* 60 + \`date +%S\`)
echo $X
それを展開して、好きなことをしてください
私はこれがエポックからミリ秒を与えないことを理解していますが、それはいくつかのケースの答えとしてまだ有用かもしれません、それはすべてあなたが本当に必要なものに依存し、ミリ秒数が必要な場合は1000を掛けます:D
最も簡単な方法は、小さな実行可能ファイル(C f.ex.から)を作成し、スクリプトで使用できるようにすることです。
date複数回実行する潜在的な問題があります。場合によっては、コマンドの作成時に日付と時刻が実行ごとに変わる場合があります。date一度実行してパーツを解析し、計算を実行する方が適切です。それをするいくつかの方法の1つはそうでしょうt=$(date +%H%M%S); (( x = ${t:0:2} * 3600 + ${t:2:2} * 60 + ${t:4:2} )); echo "$x"。質問にはbashというタグが付けられているため、これはBash構文を使用します。ほのめかしているように、あなたの答え(および私のバリエーション)は、エポック以降ではなく、ミリ秒単位ではなく、現在までの秒数を示しています。
(上記の繰り返し)date +%NはOS Xでは動作しませんが、以下も使用できます:
Perl(Time :: Formatモジュールが必要)。おそらく、使用するのに最適なCPANモジュールではありませんが、仕事は完了します。Time :: Formatは通常、ディストリビューションで利用可能になります。
perl -w -e'use Time::Format; printf STDOUT ("%s.%s\n", time, $time{"mmm"})'
date使用することはできず、ニーズに応えるbash専用コマンドはありません。
date使用できない理由を明確にしたい場合は、ダウン票を削除します。
OSXの場合、以前の応答をすべてまとめる
ProductName: Mac OS X
ProductVersion: 10.11.6
BuildVersion: 15G31+
あなたは好きなことができます
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"
}
単純なシェル経過計算が必要な場合は、上記の答えを使用して、これは簡単で移植可能です。
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