Bash 带时区和jq的strtime

Bash 带时区和jq的strtime,bash,jq,strptime,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" jq:error(at:0):日期“2018-03-13T14:

不知道我做错了什么

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"
jq:error(at:0):日期“2018-03-13T14:00:17.1614661Z”不存在
匹配格式“%Y-%m-%dT%H:%m:%S.%fZ”

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

问题不是时区,而是纳秒字段<代码>%f在C的标准
strtime
中不可用

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

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

问题不在于时区,而在于纳秒域<代码>%f在C的标准
strtime
中不可用

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

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

所以我找到了一个解决办法来绕过祖鲁偏移量和纳秒,因为我并不太在乎纳秒。不确定它是否有效

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

所以我找到了一个解决办法来绕过祖鲁偏移量和纳秒,因为我并不太在乎纳秒。不确定它是否有效

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

如果您可以提供实际数据的最小工作示例(
echo'{“time_field”:“2018-03-13T14:00:17.1614661Z”}…
,而不是此
获取数据| gunzip
存根,其他人可以测试他们的答案。顺便说一句,您可以将
Z
从两侧去掉,并查看时区与问题无关%f格式化程序是否能够处理7位数?(1614661)@LuisMuñoz,…一个更相关的问题是,本地libc中是否存在
%f
(这需要指定一个特定的平台,OP还没有指定)。CharlesDuffy您提供的示例是日期是如何显示的,因此如果您能提供实际数据的最小工作示例,我将尝试解析它(
echo'{“time_field”:“2018-03-13T14:00:17.1614661Z”}……
,也许)与其用这个
获取数据| gunzip
存根,其他人可以测试他们的答案。顺便说一句,你可以去掉两边的
Z
,看看时区与问题无关%f格式化程序能够处理7位数?(1614661)@LuisMuñoz,…一个更相关的问题是,本地libc中是否存在
%f
(这需要指定一个特定的平台,OP没有指定)。@CharlesDuffy您提供的示例是日期是如何显示的,所以我正在尝试解析它