【问题标题】:How to parse Date(928142400000+0200)?如何解析日期(928142400000+0200)?
【发布时间】:2014-11-04 09:40:40
【问题描述】:

我有 JSON 响应对象,其中包含表示日期和时间的字符串:

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

我不确定:

  • 这是什么格式
  • 如何在 python 应用程序中解析它
  • 如何将 python 日期转换成这种格式

有什么建议吗?

【问题讨论】:

  • 也许你可以看到你在找什么here

标签: python json rest python-datetime datetime-parsing


【解决方案1】:

928142400000 是自 UNIX 纪元以来的时间,以毫秒为单位,+0200 是时区。

使用dateutil librarydatetime.timezone() objects,您可以对时区偏移进行建模,时间戳本身可以用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() object 版本类似:

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)))

【讨论】:

  • 答案中还有一个括号。
猜你喜欢
  • 2013-07-11
  • 2015-02-16
  • 1970-01-01
  • 2015-06-04
  • 1970-01-01
  • 2015-11-16
  • 2011-11-20
  • 1970-01-01
  • 2010-11-03
相关资源
最近更新 更多