将奇怪的Python日期格式转换为可读日期

时间:2015-02-12 16:26:27

标签: python date

我使用Python访问某些Web服务的移动API,并且响应包含以下奇怪的日期符号:u'/Date(1409522400000+0200)/'这应该是2014年9月1日。

我不确定这是哪种格式,但我想将其转换为可读的内容,即datedatetime或Unix时间。

有人可以帮我吗?

2 个答案:

答案 0 :(得分:6)

时间字符串看起来像OData version 2 JSON verbose format for Datetime that may be seen in old ASP.NET or WCF applications

  

“/日期(< ticks> [”+“|” - “< offset>])/”
  <蜱> =毫秒数   自1970年1月1日午夜起   <偏移> = utc offset

#!/usr/bin/env python3
import re
from datetime import datetime, timedelta, timezone

time_string = u"/Date(1409522400000+0200)/"
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)
if offset:
   offset = int(offset)
   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)

输出

2014-08-31 22:00:00+00:00
2014-09-01 00:00:00+02:00

其中timezone is defined here

答案 1 :(得分:4)

你收到了一个(java?)时间戳,以毫秒为单位。你可以把它转换成更可读的东西:

from datetime import date

d=1409522400000/1000.0 # divide by 1000 to get seconds
print date.fromtimestamp(d) # -> 2014-09-01