带时区和 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
中不可用。
如果您知道您的格式不会改变,则根本没有特别理由使用 strptime
或 strftime
:
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")'
不确定我做错了什么
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
中不可用。
如果您知道您的格式不会改变,则根本没有特别理由使用 strptime
或 strftime
:
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")'