将 GMT_timezone 转换为 python 中的本地日期时间

Convert GMT_timezone to local datetime in python

我和 GMT 有一个约会,时区不同 +6 和 +5

gmt_time6= "2022-05-06T15:11:29.695GMT+06:00"
gmt_time5 = "2022-05-06T14:11:29.785GMT+05:00"

如何解析,最终格式为

gmt_time_final6 = "2022-05-06 15:11:29.695000"
gmt_time_final5 = "2022-05-06 15:11:29.695000"

首先,删除GMT指定:

date = "2022-05-06T15:11:29.695GMT+06:00".replace("GMT", "")

然后,像解析任何其他 ISO 格式一样解析它:

from datetime import datetime, timezone, timedelta
dt = datetime.fromisoformat(date)

在你的情况下,你希望它是一个 ISO 格式,不知道时区 +6(意思是 GMT+6 而不显示时区):

result = dt.astimezone(timezone(timedelta(hours=6))).replace(tzinfo=None).isoformat(sep=" ")
print(result)

一行:

from datetime import datetime, timezone, timedelta
gmt_time5 = "2022-05-06T14:11:29.785GMT+05:00"
datetime.fromisoformat(gmt_time5.replace("GMT", "")).astimezone(timezone(timedelta(hours=6))).replace(tzinfo=None).isoformat(sep=" ")

结果:'2022-05-06 15:11:29.785000'

我不确定根据什么逻辑,字符串中的显式“GMT”在 dateutil 解析器中触发了奇怪的行为*,但是通过更明确的手动解析它工作得很好:

* 参照 an earlier version of the question.

>>> from datetime import datetime
>>> ts = '2022-05-06T15:11:29.695GMT+06:00'
>>> datetime.strptime(ts, '%Y-%m-%dT%H:%M:%S.%fGMT%z')
datetime.datetime(2022, 5, 6, 15, 11, 29, 695000, tzinfo=datetime.timezone(datetime.timedelta(seconds=21600)))
>>> datetime.strptime(ts, '%Y-%m-%dT%H:%M:%S.%fGMT%z').astimezone()
datetime.datetime(2022, 5, 6, 11, 11, 29, 695000, tzinfo=datetime.timezone(datetime.timedelta(seconds=7200), 'CEST'))
>>> datetime.strptime(ts, '%Y-%m-%dT%H:%M:%S.%fGMT%z').replace(tzinfo=None)
datetime.datetime(2022, 5, 6, 15, 11, 29, 695000)