将 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)
我和 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)