如何将这种格式 '2017-12-02 23:55:66.333+01:00' 的 str 转换为 python 中的日期时间?

How to convert a str like this format '2017-12-02 23:55:66.333+01:00' to datetime in python?

我需要将格式为“2017-12-02 23:55:66.333+01:00”的一组字符串转换为日期时间。

我试过用这个:

from datetime import datetime

date_time_str = '2017-12-02 23:55:66.333+01:00'

date_time_obj = datetime.strptime(date_time_str, '%Y-%m-%d %H:%M:%S%z')

print ("The date is", date_time_obj)

但我有这个输出:

>> ValueError: raise ValueError("time data %r does not match format %r" %
ValueError: time data '2017-12-02 23:55:66.333+01:00' does not match format '%Y-%m-%d %H:%M:%S%z'

如何转换此日期或此 date_time_str 无效?

这是您想要做的,缺少剥离微秒和时区部分:

date_time_str = '2017-12-02 23:55:59.333+01:00'
date_time_obj = datetime.strptime(date_time_str, '%Y-%m-%d %H:%M:%S.%f%z')
print ("The date is", date_time_obj)

输出:

The date is 2017-12-02 23:55:59.333000+01:00

或者在 python 3.7+ 中简单地使用它:

datetime.fromisoformat(date_time_str)

有两个问题:

  • 你的秒数大于 60
  • 您需要包含微秒格式化程序

因此要修复它,

from datetime import datetime
date_time_str = '2017-12-02 23:55:06.333+01:00'
date_time_obj = datetime.strptime(date_time_str, '%Y-%m-%d %H:%M:%S.%f%z')
print("The date is", date_time_obj)

产量

The date is 2017-12-02 23:55:06.333000+01:00

您可以捕获由秒数过大引起的错误,并通过

提出有用的错误消息
from datetime import datetime
date_time_str = '2017-12-02 23:55:06.333+01:00'
try:
    date_time_obj = datetime.strptime(date_time_str, '%Y-%m-%d %H:%M:%S.%f%z')
except ValueError as ve:
    if "unconverted data remains" in ve.args[0]:
        raise ValueError("One of the values in the time string isn't meaninful")
    else:
        raise ve
print("The date is", date_time_obj)