シェルスクリプトのミリ秒時間

シェルスクリプトのミリ秒時間

誰かが12:07:59:393(HH:MM:SS:milliseconds)のように、合計時間をミリ秒単位で印刷できますか?私はHHMMSSを使ってミリ秒を印刷する方法を説明する記事をたくさん見つけましたが、リアルタイムクロックをミリ秒単位で印刷したいと思います。私はLinuxを使用しています。

答え1

これは、Unix時代が始まってから数ミリ秒が経過したかどうかを示します。

date +%s%3N

今日00:00以前に経過した秒数* 1000を減らす必要があります。または、次の式に基づいてすべてをミリ秒に変換できます。

date +%H%M%S%3N

良い:

h=$(date +%H)
m=$(date +%M)
s=$(date +%S)
ms=$(date +%3N)
echo $((10#$h*3600000 + 10#$m*60000 + 10#$s*1000 + 10#$ms))

これを行うには平均4ミリ秒かかり、おそらくその時間を減らしたくないでしょう。

編集:変数の1つに前に0があると、スクリプトは失敗します。前のゼロを削除するには、変数名の前に10#を追加して08の代わりに8を取得します。

答え2

Perlが十分に移植可能であることを確認してください。

perl -MTime::HiRes=time -MPOSIX=strftime -e '
    $now = int(time() * 1000);
    printf "%s.%03d\n", strftime("%H:%M:%S", localtime(int($now/1000))), ($now % 1000);
'

時間::高解像度そしてPOSIXすべてコアPerlモジュールです。

少数秒単位のエポックタイムスタンプのみを希望する場合:

$ perl -MTime::HiRes=time -le 'print time()'
1462218218.49011

関連情報