2017-01-30 3 views
2

Я пытаюсь преобразовать все метки времени в файл в формат времени Unix, предпочтительно используя jq/bash/python.Преобразование всех штампов времени в файл JSON для отметки времени unix в bash (Ubuntu)

оригинальный формат своего рода странным:

%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

Оригинальный формат совсем не странный. Это ISO. –

ответ

1

Для решения как первый вопрос и главная цель, вы, вероятно, хотите, чтобы определить удобную функцию, которая здесь определена согласно вашему однострочника:

def convert: strptime("%Y-%m-%dT%H:%M:%S.%z") | mktime; 

фильтр, чтобы ответить на первый вопрос может быть записано следующим образом:

map((.startdate |= convert) | (.enddate |= convert)) 

Чтобы выбрать объекты, представляющие интерес, вы можете использовать выше размораживание с этим фильтром:

now as $now 
| map(select((.startdate|convert >= $now) and (.enddate|convert >= $now))) 

К сожалению, текущая поддержка jq для часовых поясов практически равна нулю, поэтому я не уверен, как вы захотите преобразовать обратно в «местное время». С некоторой изобретательностью и строковыми манипуляциями это можно сделать в jq, хотя, возможно, и не самым общим способом.