Bashで日付形式を設定する

Bashで日付形式を設定する

スクリプトでbashの日付形式を指定したいと思います。

形式は次のとおりです。2016-10-05T12:18:36.890+02:00

私は現在以下を使用しています:$(date +%Y%m%d%H%M%S)

これを行う方法を知っていますか?

答え1

あなたが探しているのは、日付をISO 8601形式にフォーマットすることです。

$(date -Is)

IISO形式の場合、s日付と時刻です。

答え2

GNUの使用date:

$ date +%FT%T.%3N%:z
2017-06-30T13:00:54.566+01:00

bash組み込み関数を使用すると、最も近い結果を得ることができます。

$ printf -v date '%(%FT%T%z)T' -1
$ printf '%s\n' "${date%??}:${date: -2}"
2017-06-30T13:00:54+01:00

bash1秒未満の精度をサポートしていません。

最新バージョンを使用してくださいzsh

$ zmodload zsh/datetime
$ strftime -s date '%FT%T.%3.%z'
$ printf '%s\n' $date[1,-3]:$date[-2,-1]
2017-06-30T13:00:54.566+01:00

答え3

次のことを試すことができます。

date +%Y-%m-%d-T%H:%M:%S%z

答え4

要求された形式は次のように書くことができます。

$ date +%Y-%m-%dT%H:%M:%S%z       # similar to your previous +%Y%m%d%H%M%S
2016-10-05T11:18:36+0100

$ date +'%FT%T.%3N%:z'            # shorter with GNU milliseconds
2016-10-05T11:18:36.247+01:00

$ ( t=$EPOCHREALTIME; u=${t#*.};
    printf "%(%FT%T)T.%s%(%z)T\n" "${t%.*}" "${u%???}" )  # Pure bash 5.0+
2016-10-05T11:18:36.450+0100

関連情報