带时区和 jq 的Strptime

Strptime with timezones and jq

不确定我做错了什么

getting_data | gunzip | jq -r '.time_field | strptime("%Y-%m-%dT%H:%M:%S.%fZ")'

错误返回如下:

jq: error (at <stdin>:0): date "2018-03-13T14:00:17.1614661Z" does not 
match format "%Y-%m-%dT%H:%M:%S.%fZ"

所需的输出将是 2018-03-13 14:00:17

问题不是时区,而是纳秒字段; %f 在 C 的标准 strptime 中不可用。

如果您知道您的格式不会改变,则根本没有特别理由使用 strptimestrftime

jq -r '.time_field | sub("^(?<date>[[:digit:]-]+)T(?<time>[[:digit:]:]+)[.].*";
                         "\(.date) \(.time)")' \
  <<<'{"time_field": "2018-03-13T14:00:17.1614661Z"}'

...正确发出:

2018-03-13 14:00:17

所以我找到了解决 ZULU 偏移和 nano-seconds 的解决方法,因为我不太关心 nano-seconds。不确定是否有效

echo '{"time_field": "2018-03-13T14:00:17.1234567Z"}' | jq -r '
.time_field 
| split(".")[0] 
| strptime("%Y-%m-%dT%H:%M:%S") 
| mktime 
| strftime("%F %X")'