【发布时间】:2021-06-29 14:25:50
【问题描述】:
我在下面有一个示例 json 输出,LastAccessedDate 值是 AWS 在运行 CLI 命令时输出的值,因此我无法控制日期的格式。
{
"MyList": [
{
"Name": "MyName1",
"LastAccessedDate": "2021-06-29T02:00:00+02:00"
}
]
}
当尝试运行 jq 命令以使用 fromdate 进行选择时,如下所示:
cat output.json | jq '.[] | .[] | select ( .LastAccessedDate | fromdate > "2021-01-01T02:00:00+02:00")'
然后我收到错误消息:
jq: error (at <stdin>:8): date "2021-06-29T02:00:00+02:00" does not match format "%Y-%m-%dT%H:%M:%SZ"
有什么办法可以让我使用 jq 过滤输出吗? 甚至希望能解释一下可能出现的问题,以便我理解未来的用例。
【问题讨论】:
-
jq尚不支持使用时区(本机)解析时间字符串。即带有 +/- 偏移量。你需要自己写 -
顺便说一句,注意最好避免
cat output.json | jq ...——而不是开始单独的/bin/cat执行并从附加到该程序输出的FIFO中读取jq,使用jq ... <output.json所以jq可以直接从文件中读取,而不需要从从文件中读取的单独的可执行文件 的输出中读取。特别是对于 jq,在实践中并没有那么大的差异,但是还有其他标准工具的性能差异很大。 -
(例如,
cat file | wc -c是 O(n),因为它需要读取file的每个字节才能知道文件有多大;但wc -c <file是 O(1),因为无论文件大小,它都可以调用seek()跳转到末尾,调用tell()获取当前位置)。 -
strptime("%FT%T%z")可能是一个选项,但它需要像+0200这样的时区,而不是+02:00。 -
但是,假设时间戳是在相同的时区和相同的格式,你可以按字典顺序比较它们。
标签: json jq timezone-offset timestamp-with-timezone