【问题标题】:Convert weird Python date format to readable date将奇怪的 Python 日期格式转换为可读日期
【发布时间】:2015-04-13 11:49:09
【问题描述】:

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

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

谁能帮我解决这个问题?

【问题讨论】:

  • 你能告诉我们那个例子的实际日期是什么吗?
  • 我想应该是 2014 年 9 月 1 日

标签: python date


【解决方案1】:

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

“/Date([“+” | “-” ])/”
= 毫秒数 自 1970 年 1 月 1 日午夜起
= UTC 偏移量

#!/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.

【讨论】:

    【解决方案2】:

    您收到了一个 (java?) 时间戳(以毫秒为单位)。您可以将其转换为更具可读性的内容,如下所示:

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

    【讨论】:

    • date.fromtimestamp() 返回本地时区的日期。它可能与输入字符串中指定的源时区不同,例如,如果本地时区是 UTC,那么您的代码将返回 2014-08-31 而正确的值是不同的日期 2014-09-01 00:00:00+02:00
    猜你喜欢
    • 2012-10-28
    • 1970-01-01
    • 2012-05-06
    • 2018-02-12
    • 2014-08-11
    • 1970-01-01
    • 2023-03-30
    • 2011-08-13
    相关资源
    最近更新 更多