【问题标题】:Convert iso format datetime string to datetime object in Python在 Python 中将 iso 格式的日期时间字符串转换为日期时间对象
【发布时间】:2021-07-19 05:50:11
【问题描述】:

在 Python 3.6 中将 iso 格式的日期时间字符串转换为日期时间对象而不丢失时区信息时,我遇到了一个问题。 字符串是这样的。

2021-07-04T00:00:00+02:00

我尝试了 datetime.datetime.strptime 方法。但无法设置正确的格式字符串。

datetime.datetime.strptime( "2021-07-04T00:00:00+02:00", "%Y-%m-%dT%H:%M:%S%z")

如果日期时间字符串是这种格式,它可以工作:

datetime.strptime("2021-07-04T00:00:00+0200", "%Y-%m-%dT%H:%M:%S%z")

但是在这种格式下,不行:

datetime.datetime.strptime( "2021-07-04T00:00:00+02:00", "%Y-%m-%dT%H:%M:%S%z")

我有这种格式的日期时间:

2021-07-04T00:00:00+02:00

【问题讨论】:

  • 您遇到了什么问题?
  • 这能回答你的问题吗? How do I parse an ISO 8601-formatted date?
  • 这是什么问题?也许如果你也写下你尝试过的东西(实际结果和预期结果),它会帮助我们更好地理解你的问题。 Python3.6 现在是旧的。如果您可以更新到 Python 3.7(或更高版本),您在 datetime 模块中有 fromisoformat 函数
  • @MrFuppes 我不知道如何使用 strptime 方法获取对象。

标签: python-3.x datetime python-3.6


【解决方案1】:

对于 Python 3.7+,您也可以使用 datetime.datetime.fromisoformat() 函数 strptime("2021-07-04T00:00:00+02:00", "%Y-%m-%dT%H:%M:%S%z") 可以正常工作。

对于 Python 3.6 及更低版本,时区格式预计为 ±HHMM。所以你必须在使用strptime之前转换字符串(去掉最后一个分号)。

例如:

tz_found = t_str.find('+')    
if tz_found!=-1 and t_str.find(':', tz_found)!=-1:
    t_str = t_str[:tz_found+3] + t_str[tz_found+4:tz_found+6]
result = datetime.datetime.strptime( t_str, "%Y-%m-%dT%H:%M:%S%z")

【讨论】:

  • 但我想保留时区信息。 strptime("2021-07-04T00:00:00+0200", "%Y-%m-%dT%H:%M:%S%z") 适用于 Python 3.6 但是如果时区中有冒号(像 +02:00) 它不起作用
  • OK 表示,需要手动操作。没有直接的方法!
猜你喜欢
  • 2019-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-10
相关资源
最近更新 更多