将ISO8601日期时间转为数字字段遇jq语法错误,求解决方案
解决jq日期转数字字段的语法错误及替代方法
先修正你的语法错误
你遇到的编译错误是因为formatdate的参数iso8601未加引号,jq要求字符串类型的参数必须用引号包裹。修正后的表达式如下:
"test": (.int.example_t | formatdate "iso8601" | tonumber)
其他日期转数字的方法
方法1:用strptime+mktime自定义解析(兼容多数jq版本)
如果.int.example_t是特定格式的日期字符串,比如"2024-05-20T14:30:00Z",可以先通过strptime解析日期结构,再用mktime转换为Unix时间戳(数字):
"test": (.int.example_t | strptime "%Y-%m-%dT%H:%M:%SZ" | mktime)
注意:需要根据你的实际日期格式调整strptime的格式占位符(比如%Y代表4位年份,%m代表两位月份)。
方法2:使用fromdateiso8601(jq 1.6及以上版本可用)
如果你的jq版本≥1.6,官方提供了专门处理ISO 8601格式日期的函数fromdateiso8601,可以直接将标准ISO 8601字符串转为数字时间戳,写法更简洁:
"test": (.int.example_t | fromdateiso8601)
内容的提问来源于stack exchange,提问作者Light Ee
相关产品推荐
相关产品推荐

