我正在尝试将文件中的所有时间戳转换为Unix时间格式,最好使用jq / bash / python。
原始格式有点奇怪:
%Y-%m-%dT%H:%M:%S.%z
GoToMeeting API的示例文件内容:
[
{
"Last Name": "John",
"Subject": "Meet Now",
"meetingId": "983329197",
"meetingType": "immediate",
"First Name": "Doe",
"Conference Info": "111-222-333",
"startdate": "2017-01-25T04:50:25.+0000",
"enddate": "2017-01-25T05:50:25.+0000",
"status": "INACTIVE"
},
{
"Last Name": "John",
"Subject": "dumb meeting",
"meetingId": "569996685",
"meetingType": "scheduled",
"First Name": "Doe",
"Conference Info": "111-222-333",
"startdate": "2017-02-15T10:00:00.+0000",
"enddate": "2017-02-15T10:30:00.+0000",
"status": "INACTIVE"
}
]
我能够通过运行这个来将一个单独的值转换为Unix:
输入:
jq 'strptime("%Y-%m-%dT%H:%M:%S.%z") | mktime';
"2015-03-05T04:50:25.+0000"
输出:
1425531025
这样做的主要目的是过滤掉所有早于当前时间的日期,然后将其转换为当地时间。
答案 0 :(得分:1)
要解决第一个问题和主要目标,你可能想要定义一个便利功能,这里根据你的单行指定:
def convert: strptime("%Y-%m-%dT%H:%M:%S.%z") | mktime;
回答第一个问题的过滤器可以写成如下:
map( ( .startdate |= convert) | (.enddate |= convert) )
要选择感兴趣的对象,可以使用上面的def与此过滤器:
now as $now
| map( select((.startdate|convert >= $now) and (.enddate|convert >= $now)))
不幸的是,jq目前对时区的支持几乎为零,所以我不确定你将如何转换回“当地时间”。通过一些独创性和字符串操作,它可以在jq中完成,但可能不是最常用的方式。