2022-03-17T08:06:20.411493824Z 形式で日付を取得する方法

2022-03-17T08:06:20.411493824Z 形式で日付を取得する方法

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

関連情報