将JSON文件中的所有时间戳转换为bash中的unix时间戳(Ubuntu)

我试图将文件中的所有时间戳转换为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:

input:

 jq 'strptime("%Y-%m-%dT%H:%M:%S.%z") | mktime'; "2015-03-05T04:50:25.+0000" 

输出:

 1425531025 

其主要目标是过滤掉比当前时间早的所有date,然后将其转换为当地时间。

为了解决第一个问题和主要目标,您可能需要定义一个便捷函数,在这里根据您的一行指定:

 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来完成,尽管可能不是以最一般的方式。