Strptime与时区和jq

时间:2018-03-13 18:00:57

标签: bash jq strptime

不确定我在这里做错了什么

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

2 个答案:

答案 0 :(得分:1)

问题不是时区,而是纳秒场;对于C.

,标准%f中不提供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

答案 1 :(得分:1)

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

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")'