提问人:Logan Lee 提问时间:4/12/2022 更新时间:4/12/2022 访问量:172
在 jq 中链接 localtime 和 mktime
Chaining localtime and mktime in jq
问:
如果我这样做:
$ 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 时间,因为它被错误地转换为秒?localtime
mktime
如果我这样做:
$ jq -cn 'now | gmtime | mktime | localtime'
现在,这给出了正确的结果(给出当前本地时间的“分解时间”表示)。
我说得对吗?谢谢。
答:
0赞
ikegami
4/12/2022
#1
是的。
来自 jq 文档:
内置函数使用 和 输出的时间的“分解时间”表示形式。
mktime
gmtime
strptime
您最初通过了本地时间,但它需要 UTC 时间。正如你所推测的,这就是为什么你的原始代码失败了,而后一个代码起作用了。jq's 是 的倒数。[1]mktime
gmtime
$ jq -rn 'now | ., ( gmtime | mktime )'
1649770973.430903
1649770973
JQ 似乎没有提供从本地时间转换为纪元时间的方法。[2]
这与 C 的行为不同。C 需要本地时间,因此它与 相反。
mktime
mktime
localtime
在 C 语言中,可以同时扮演这两个角色。虽然它通常从本地时间转换,但它也可以通过将本地时区设置为 UTC 来从 UTC 转换。
mktime
评论