在 bash 中设置日期格式

在 bash 中设置日期格式

我想在脚本中格式化 bash 中的日期。

格式为:2016-10-05T12:18:36.890+02:00

我目前正在使用:$(date +%Y%m%d%H%M%S)

知道如何做到这一点吗?

答案1

您正在寻找的是将日期格式化为 ISO 8601 格式。

$(date -Is)

I对于 ISO 格式,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

asbash不支持亚秒级精度。

使用最新版本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

相关内容