2017-01-30 14 views
2

ファイル内のすべてのタイムスタンプを、好ましくはjq/bash/pythonを使用してUnixタイムフォーマットに変換しようとしています。JSONファイルのすべてのタイムスタンプをbash(Ubuntu)のunixタイムスタンプに変換します

元の形式はちょっと奇妙です:

%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のちょうど1つの値を変換することができました:

入力:

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

出力:

1425531025 

本の主な目標は、現在の時刻より古いすべての日付をフィルタリングして、ローカル時間に変換することです。最初に答えるために、フィルタ

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

+0

元の形式はまったく奇妙ではありません。それはISOです。 –

答えて

1

は、最初の質問と主な目標の両方に取り組むためには、おそらくここにあなたのワンライナーに応じて指定された便利な関数を定義したいと思います

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

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

は、あなたがこのフィルタで上記デフを使用することができ、関心のオブジェクトを選択するには次のように質問はその後、書くことができます

残念ながら、現時点でのタイムゾーンのサポートはほとんどありません。そのため、どのようにして「ローカルタイム」に変換したいのかよく分かりません。いくつかの工夫と文字列の操作で、それはjqで行うことができますが、もっとも一般的な方法ではないかもしれません。

関連する問題