回答:
date
OS X のプログラムは、GNUのcoreutils date
プログラムとは異なります。coreutils(gnu-dateを含む)をインストールするdate
と、ミリ秒をサポートするバージョンができます。
ソースからのインストールはネイティブOS Xユーザーにとっては面倒な場合があるため、Homebrewを使用することをお勧めします。
Homebrewを使用してこれらのツールをインストールするには、ターミナルでこのonelinerを実行します。
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Homebrewがインストールされました(インストール後にインストーラーの提案に従うことが賢明です)。次に、を使用してcoreutilsをインストールしbrew
ます。
brew install coreutils
インストールが言うように、すべてのコマンドは接頭辞「g」でインストールされています(gdate、gcat、glnなど)。これらのコマンドを通常の名前で本当に使用する必要がある場合は、次のように「gnubin」ディレクトリをPATH(~/.bash_profile
)に追加できます。
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
これで実行できます
gdate +%s.%N
これにより、エポック以降の時間がミリ秒単位で出力されます。
date
GNUなりdate
(代わりにgdateの)
+%s.%N
形式はミリ秒ではなくナノ秒の精度まで秒を与えます。brewを使用してインストールした後gdate
、マンページをチェックして、ミリ秒が使用可能かどうかを確認しました。そうではありません。また、の精度を%N
指定できるとは言わなかったが、とにかく試した。秒をミリ秒の精度のみ(つまり、小数点以下3桁)まで下げるコマンドはであることがわかりましたgdate +%s.%3N
。
OS Xでは、date +%s
OS Xがdate
出力でこれ以上の精度をサポートしておらず、内部表現でサポートされていない余分な精度はマイナス無限大に向かって切り捨てられるため、実行するだけです。
ミリ秒単位の出力が必要な場合は、次のコマンドを使用できますが、前述の理由により精度を追加するのではなく、ゼロを追加するだけで出力が修正されます。以下は、必要な精度をサポートするシステムで正しいミリ秒を出力します。
echo $(($(date +'%s * 1000 + %-N / 1000000')))
上記のコマンドのソース:Unix.SE – Unixエポックからのミリ秒の取得方法
OS Xで正しい数のゼロを追加するコマンドが必要な場合は、次を使用できます。
date +%s000
%-N
、何もしません(シェル変数$N
が設定されている場合は問題が発生する可能性があります)。使用するだけですdate +%s000
(またはdate +%s.000
、小数点が必要な場合)。
date
コマンドは%-N
をそのまま通過するためN
、計算に干渉する可能性があります。設定N=7000000000000000000
を試してから、コマンドを試してみてください...これは実際にはめったにないケースですが、環境に依存しないものの方が安全だと思います。
gdate
インストールされたパスを追加する必要さえありませんでした/usr/local/bin/gdate
。