【问题标题】:How to convert a UTC datetime string into date?如何将 UTC 日期时间字符串转换为日期?
【发布时间】:2014-04-08 18:01:15
【问题描述】:

我想将一个日期时间字符串转换回日期。时区给我带来了麻烦,我不知道如何解决。

datetime.datetime.strptime(json_event['date_time'], '%a, %d %b %Y %H:%M:%S %Z')

我收到错误消息:

ValueError:时间数据“2014 年 4 月 8 日星期二 17:57:34 -0000”不匹配 格式 '%a, %d %b %Y %H:%M:%S %Z'

如果我离开 %Z,我会收到以下错误消息:

ValueError:未转换的数据仍然存在:-0000

日期最初是 UTC:

current_date = datetime.datetime.utcnow()

更新:

我想在没有任何外部库(例如 dateutil.parser)的情况下本机解决这个问题,因此副本中的解决方案对我没有帮助。

【问题讨论】:

  • 我不想使用dateutil.parser。有没有办法在本地处理这个问题?
  • 关于这个问题还有另外两个很好的答案,看看他们
  • 你的意思是接受的答案有一个好的解决方案?阅读下面的评论。我把这个留在这里,也许其他人有更好的主意。谢谢

标签: python datetime python-2.7


【解决方案1】:
import dateutil.parser

date = dateutil.parser.parse(json_event['date_time'])

如果您没有dateutil,请获取。

pip install python-dateutil

【讨论】:

  • 抱歉,我知道这个解决方案。如果可能,我宁愿不使用任何外部库。
  • @Hooman 那么你将不得不做一些字符串操作,因为 python 标准库不处理 -0000 (等等)
【解决方案2】:

如果您总是得到 UTC 时间:忽略最后 6 个字符(空格、符号、4 个数字),然后像没有 %Z 一样转换为日期时间。

您将遇到的一个问题是您的系统会假定它是您的本地时区,如果您将其转换为任何其他时区,它将错误地转换。在这种情况下,下一步是使用另一个问题中的this answer

如果您也获得非 UTC 时间:

  1. 剪掉最后 6 个字符。
  2. 对最后 4 位执行 strptime,格式为 HHMM (%H%M) --> Y
  3. 在下面的第 5 步中获取符号并反转。
  4. 然后像上面一样获取其余的日期时间(保留最后 6 个字符,格式中没有 %Z)--> X
  5. 然后 X-Y(或 X+Y,反转从第 3 步得到的内容)将为您提供一个日期时间对象。然后按照链接答案中的步骤使 datetime obj 时区感知。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-19
    • 2015-10-24
    • 2011-06-13
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 2014-11-18
    • 2022-01-11
    相关资源
    最近更新 更多