【问题标题】:ValueError: time data '2021-11-05 10:13:46+11:00' does not match format '%y-%m-%d %H:%M:%S%z'ValueError:时间数据“2021-11-05 10:13:46+11:00”与格式“%y-%m-%d %H:%M:%S%z”不匹配
【发布时间】:2021-11-05 00:13:47
【问题描述】:

我有一个字符串时间戳:

ts = "2021-11-05 10:13:46+11:00"

我想使用以下方法转换为日期时间:

datetime.strptime(ts, "%y-%m-%d %H:%M:%S%z")

但我收到了ValueError

ValueError:时间数据“2021-11-05 10:13:46+11:00”与格式“%y-%m-%d %H:%M:%S%z”不匹配

我认为这是因为“+11:00”中有一个“:”?

这是重现错误的代码

from datetime import datetime

ts = "2021-11-05 10:13:46+11:00"

date_ts = datetime.strptime(ts, "%y-%m-%d %H:%M:%S%z")

print(date_ts)

【问题讨论】:

  • 使用大写的%Y 表示您的年份,小写的%y 匹配两位数的年份。 docs.python.org/3/library/…
  • 谢谢!我正在阅读一些相反的文档。感谢您的帮助。

标签: python datetime strptime


【解决方案1】:

datetime.fromisoformat

>>> datetime.fromisoformat("2021-11-05 10:13:46+11:00")
datetime.datetime(2021, 11, 5, 10, 13, 46, tzinfo=datetime.timezone(datetime.timedelta(seconds=39600)))

【讨论】:

  • 谢谢,这会很好用,但不幸的是,我们在澳大利亚有夏令时,所以如果 ts 的值发生变化,偏移量也会发生变化。
  • @HBates 用于正确处理夏令时,您需要一个 时区,而不仅仅是您输入的 UTC 偏移量 (+11:00)。 strptime 和 fromisoformat 都不会在这里为您提供帮助,请查看 Python 的 zoneinfo 进行时区处理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-30
  • 2021-10-11
  • 2016-10-15
  • 1970-01-01
  • 2015-11-14
  • 1970-01-01
相关资源
最近更新 更多