jq strftime() 显示特定时区的时间

Jq strftime() to show time in a specific time zone

如何使用 jq 将自 Unix 纪元以来的秒数转换为人类可读格式但已调整为澳大利亚悉尼时区的时间字符串?

我试过过滤器:

now | strftime("%Y-%m-%dT%H:%M:%SZ")

但我不知道如何调整时间格式字符串来传达澳大利亚悉尼时区。

可能我需要用相关时区替换“Z”?

如果您使用的是 jq v1.6,请使用 strflocaltime 而不是 strftime,后者显示 您的 时区的时间。

jq -n 'now | strflocaltime("%Y-%m-%dT%H:%M:%S")'

Demo

来自manual:

The strftime(fmt) builtin formats a time (GMT) with the given format. The strflocaltime does the same, but using the local timezone setting.

如果您的时区不同,请在调用 jq

之前相应地设置 shell 的 TZ 变量
TZ=Australia/Sydney jq -n 'now | strflocaltime("%Y-%m-%dT%H:%M:%S")'

以下两个都转换为TZ环境变量var指示的时区:

localtime | strftime(...)
strflocaltime(...)

例如,

$ jq -nr 'now | strftime("%FT%T")'
2022-02-14T06:14:07

$ jq -nr 'now | gmtime | strftime("%FT%T")'
2022-02-14T06:14:07

$ jq -nr 'now | localtime | strftime("%FT%T")'
2022-02-14T02:14:07

$ jq -nr 'now | strflocaltime("%FT%T")'
2022-02-14T02:14:07

这使用您的本地时间,由 TZ 环境变量确定。根据需要进行调整。

$ TZ=America/Halifax jq -nr 'now | strflocaltime("%FT%T")'
2022-02-14T02:14:07

$ TZ=America/Toronto jq -nr 'now | strflocaltime("%FT%T")'
2022-02-14T01:14:07

$ TZ=America/Vancouver jq -nr 'now | strflocaltime("%FT%T")'
2022-02-14T22:14:07

如果您想在 jq 中的单个 运行 中转换为不同的时区,那您就不走运了。 jq 不支持转换 to/from 个除 UTC 和本时区以外的时区。

同时测试了 1.5 和 1.6。