2022-03-17T08:06:20.411493824Z
単純なbashコマンドを使用して日付を取得する方法に関する簡単な答えが見つからないようです。それが現在の日時です。
以下を試しましたが、追加の番号を取得できませんでした。
DATE=$(date '+%FT%TZ')
echo $DATE
答え1
GNUを使用してISO 8601形式(ナノ秒)を使用してUTC時間を見つける場合date
:
date -Ins -u
正確な形式が必要な場合は、GNUのUTC形式を使用してくださいdate
。
date -u +%Y-%m-%dT%H:%M:%S.%NZ
または
date -u +%FT%T.%NZ
答え2
GNUにアクセスできない場合(個々の呼び出しに数千または数百万が必要な場合にナノ秒精度を取得するのは合理的ですかdate
)、他のシェルに切り替えるオプションがある場合は、次のことができます。date
存在するzsh
:
TZ=UTC0 print -rP '%D{%FT%T.%9.Z}'
(ここではプロンプト拡張で使用されますprint -P
)
または:
zmodload zsh/datetime
TZ=UTC0 strftime %FT%T.%9.Z $epochtime
または変数に保存します。
TZ=UTC0 print -rPv var '%D{%FT%T.%9.Z}'
または:
zmodload zsh/datetime
TZ=UTC0 strftime -s var %FT%T.%9.Z $epochtime
または:
() { local -x TZ=UTC0; var=${(%):-%D{%FT%T.%9.Z}}; }
ksh93の使用:
TZ=UTC0 printf '%(%FT%T.%NZ)T\n'
または変数に保存します。
var=${ printf '%(%FT%T.%NZ)T'; }
bash
実際、数年前にサブセットがコピーされたが、ksh93
ナノ秒をサポートしていない。printf '%(format)T' datespec
%N
バージョン5.0以降、zshに$EPOCHSECONDS
合計$EPOCHREALTIME
変数(配列ではない)の$epochtime
サポートが追加されました。マイクロ秒精度しかありませんが、ユースケースには十分です。
t=$EPOCHREALTIME; TZ=UTC0 printf "%(%FT%T)T.${t#*.}Z\n" "${t%.*}"
これらすべては組み込み機能のみを使用し、どのプロセスも分岐しないため、ミリ秒あたりのかなり多くのプロセスを実行できるはずです。
$ repeat 10 TZ=UTC0 print -rP '%D{%FT%T.%9.Z}'
2022-03-17T12:04:56.563450377Z
2022-03-17T12:04:56.563488246Z
2022-03-17T12:04:56.563512375Z
2022-03-17T12:04:56.563530355Z
2022-03-17T12:04:56.563545833Z
2022-03-17T12:04:56.563559764Z
2022-03-17T12:04:56.563575171Z
2022-03-17T12:04:56.563594030Z
2022-03-17T12:04:56.563611980Z
2022-03-17T12:04:56.563626251Z
$ repeat 10 date -u +%FT%T.%NZ
2022-03-17T12:05:28.902806919Z
2022-03-17T12:05:28.905552036Z
2022-03-17T12:05:28.907594864Z
2022-03-17T12:05:28.908563238Z
2022-03-17T12:05:28.909433758Z
2022-03-17T12:05:28.910549552Z
2022-03-17T12:05:28.911642330Z
2022-03-17T12:05:28.912596098Z
2022-03-17T12:05:28.913575587Z
2022-03-17T12:05:28.914538184Z