1

I have JSON response object with string representing date and time:

"event":{
    "type":"Type",
    "date-time":"\/Date(928142400000+0200)\/",
},

I am not sure:

  • what format is that
  • how can I parse it in python app
  • how can I convert python date into this format

Any suggestions?

4

1 に答える 1

3

928142400000は UNIX エポックからのミリ秒単位の時間、+0200はタイムゾーンです。

dateutilタイムゾーン オフセットをモデル化できるライブラリまたはdatetime.timezone()オブジェクトを使用するとdatetime.datetime.fromtimestamp()、値を 1000.0 で除算すれば、タイムスタンプ自体を で解析できます。

import datetime
import re

timestamp_parse = re.compile(r'Date\((\d+)([+-]\d{4})\)')
timestamp, offset = timestamp_parse.search(datetime_value).groups()
tzoffset = datetime.timedelta(hours=int(offset[1:3]), minutes=int(offset[3:]))
if offset[0] == '-':
    tzoffset *= -1
tzoffset = datetime.timezone(tzoffset)
dt = datetime.datetime.fromtimestamp(int(timestamp) / 1000.0).replace(tzinfo=tzoffset)

dateutil.tz.tzoffset()オブジェクトのバージョンは似ています:

import datetime
import re
import dateutil.tz

timestamp_parse = re.compile(r'Date\((\d+)([+-]\d{4})\)')
timestamp, offset = timestamp_parse.search(datetime_value).groups()
tzoffset = int(offset[1:3]) * 3600 + int(offset[3:]) * 60
if offset[0] == '-':
    tzoffset *= -1
tzoffset = dateutil.tz.tzoffset(None, tzoffset)
dt = datetime.datetime.fromtimestamp(int(timestamp) / 1000.0).replace(tzinfo=tzoffset)

デモ:

>>> import datetime
>>> import re
>>> datetime_value = "/Date(928142400000+0200)/"
>>> timestamp_parse = re.compile(r'Date\((\d+)([+-]\d{4})\)')
>>> timestamp, offset = timestamp_parse.search(datetime_value).groups()
>>> tzoffset = datetime.timedelta(hours=int(offset[1:3]), minutes=int(offset[3:]))
>>> if offset[0] == '-':
...     tzoffset *= -1
... 
>>> tzoffset = datetime.timezone(tzoffset)
>>> datetime.datetime.fromtimestamp(int(timestamp) / 1000.0).replace(tzinfo=tzoffset)
datetime.datetime(1999, 5, 31, 10, 20, tzinfo=datetime.timezone(datetime.timedelta(0, 7200)))
于 2014-11-04T09:48:11.097 に答える