在 jq 中链接 localtime 和 mktime

Chaining localtime and mktime in jq

提问人:Logan Lee 提问时间:4/12/2022 更新时间:4/12/2022 访问量:172

问:

如果我这样做:

$ jq -cn 'now | localtime'
[2022,3,12,21,9,29.65448808670044,2,101]

它正确地给出了当前本地时间的“分解时间”表示形式。

但是,如果我这样做:

$ jq -cn 'now | localtime | mktime | localtime'
[2022,3,13,7,10,36,3,102]

它返回与当前本地时间不同的“分解时间”表示形式。

我认为当输出转换为秒时,因为它错误地假设了 GMT 时间,因为它被错误地转换为秒?localtimemktime

如果我这样做:

$ jq -cn 'now | gmtime | mktime | localtime'

现在,这给出了正确的结果(给出当前本地时间的“分解时间”表示)。

我说得对吗?谢谢。

jq 本地时间 mktime

评论


答:

0赞 ikegami 4/12/2022 #1

是的。

来自 jq 文档:

内置函数使用 和 输出的时间的“分解时间”表示形式。mktimegmtimestrptime

您最初通过了本地时间,但它需要 UTC 时间。正如你所推测的,这就是为什么你的原始代码失败了,而后一个代码起作用了。jq's 是 的倒数。[1]mktimegmtime

$ jq -rn 'now | ., ( gmtime | mktime )'
1649770973.430903
1649770973

JQ 似乎没有提供从本地时间转换为纪元时间的方法。[2]


  1. 这与 C 的行为不同。C 需要本地时间,因此它与 相反。mktimemktimelocaltime

  2. 在 C 语言中,可以同时扮演这两个角色。虽然它通常从本地时间转换,但它也可以通过将本地时区设置为 UTC 来从 UTC 转换。mktime