时间字符串为OData version 2 JSON verbose format for Datetime:
“/Date(<ticks>[“+” | “-” <offset>])/”
<ticks> = 毫秒数
自 1970 年 1 月 1 日午夜起
<offset> = 添加的分钟数或
减法
@Matt Johnson mentions 格式可以在 ASP.NET 或 WCF 应用程序中看到。
#!/usr/bin/env python3
import re
from datetime import datetime, timedelta, timezone
time_string = "/Date(1405961743000+0100)/"
epoch = datetime(1970, 1, 1, tzinfo=timezone.utc)
ticks, offset = re.match(r'/Date\((\d+)([+-]\d{4})?\)/$', time_string).groups()
utc_dt = epoch + timedelta(milliseconds=int(ticks))
print(utc_dt, utc_dt.strftime('%Z'))
if offset:
offset = int(offset)
# http://www.odata.org/documentation/odata-version-2-0/json-format
# says offset is minutes (an error?)
dt = utc_dt.astimezone(timezone(timedelta(minutes=offset)))
print(dt, dt.strftime('%Z'))
# but it looks like it could be HHMM
hours, minutes = divmod(abs(offset), 100)
if offset < 0:
hours, minutes = -hours, -minutes
dt = utc_dt.astimezone(timezone(timedelta(hours=hours, minutes=minutes)))
print(dt, dt.strftime('%Z'))
2014-07-21 16:55:43+00:00 UTC+00:00
2014-07-21 18:35:43+01:40 UTC+01:40
2014-07-21 17:55:43+01:00 UTC+01:00
看起来应该忽略 odata.org 文档,并且应该将偏移量视为 HHMM 格式。