将字符串日期转换为时区的日期时间

convert str date to datetime for timezone

我有一个 API return 这个日期字符串

strdate = '2019-10-07T06:09:28.984Z'

如何将其转换为日期时间对象?

dt = datetime.datetime.strptime(strdate, '%Y-%m-%d')

如果我像上面那样使用 strptime,我会得到 "ValueError: unconverted data remains: T06:09:54.346Z" 日期字符串中包含"T"和"Z"怎么办?我想要当地时间的数据。但是这个字符串真的是时区感知的,所以我可以正确地转换它吗?在这种情况下,我知道时区,但如果我不知道怎么办?

错误是因为您没有在格式字符串中包含时间部分。这样做:

datetime.strptime('2019-10-07T06:09:28.984Z', '%Y-%m-%dT%H:%M:%S.%f%z')

这导致:

datetime.datetime(2019, 10, 7, 6, 9, 28, 984000, tzinfo=datetime.timezone.utc)

如果您想将其转换为本地时区,请执行以下操作:

from pytz import timezone

dt = datetime.strptime(strdate, '%Y-%m-%dT%H:%M:%S.%f%z')
local_dt = dt.astimezone(timezone('Asia/Tokyo'))

演示:https://repl.it/repls/RotatingSqueakyCertifications

import datetime
strdate = '2019-10-07T06:09:28.984Z'
dt=datetime.datetime.strptime(strdate, "%Y-%m-%dT%H:%M:%S.%fZ")
print(dt)

# output - 2019-10-07 06:09:28.984000