将时区偏移应用于 Python 中的日期时间
Apply timezone offset to datetime in Python
对于给定的日期字符串,例如 2009-01-01T12:00:00+0100
,我需要 UTC 日期时间对象。
from datetime import datetime
datetime.strptime("2013-03-21T14:19:42+0100", "%Y-%m-%dT%H:%M:%S%z")
returns
datetime.datetime(2013, 3, 21, 14, 19, 42, tzinfo=datetime.timezone(datetime.timedelta(0, 3600)))
我不敢相信 datetime
或 pandas
中没有方法可以将与时区相关的偏移量应用到日期时间并返回纯 UTC 日期时间。
如何应用 tzinfo
offset/delta,以便生成的时区是纯 UTC (tzinfo=None
)?
这感觉有点脏,但确实有效
from datetime import datetime
orig_dt = datetime.strptime("2013-03-21T14:19:42+0100", "%Y-%m-%dT%H:%M:%S%z") # datetime.datetime(2013, 3, 21, 14, 19, 42, tzinfo=datetime.timezone(datetime.timedelta(0, 3600)))
utc_time_value = orig_dt - orig_dt.utcoffset()
utc_dt = utc_time_value.replace(tzinfo=None) # datetime.datetime(2013, 3, 21, 13, 19, 42)
这是实际代码(内置):
from datetime import datetime, timezone, timedelta
return datetime(yy, mm, dd, hh, min, ss, 0, timezone(timedelta(hours=5))) # +0500
# or
return datetime(yy, mm, dd, hh, min, ss, 0, timezone(timedelta(seconds=18000))) # +0500
我相信.astimezone()
就是你想要的。
from datetime import datetime, timezone
d = datetime.strptime("2013-03-21T14:19:42+0100", "%Y-%m-%dT%H:%M:%S%z") # 2013-03-21 14:19:42+01:00
d.astimezone(timezone.utc) # 2013-03-21 13:19:42+00:00
timezone.utc
在这种情况下不是可选参数: documentation says
If called without arguments (or with tz=None
) the system local
timezone is assumed for the target timezone.
这可能会导致意外行为(取决于您当地的时区)。
对于给定的日期字符串,例如 2009-01-01T12:00:00+0100
,我需要 UTC 日期时间对象。
from datetime import datetime
datetime.strptime("2013-03-21T14:19:42+0100", "%Y-%m-%dT%H:%M:%S%z")
returns
datetime.datetime(2013, 3, 21, 14, 19, 42, tzinfo=datetime.timezone(datetime.timedelta(0, 3600)))
我不敢相信 datetime
或 pandas
中没有方法可以将与时区相关的偏移量应用到日期时间并返回纯 UTC 日期时间。
如何应用 tzinfo
offset/delta,以便生成的时区是纯 UTC (tzinfo=None
)?
这感觉有点脏,但确实有效
from datetime import datetime
orig_dt = datetime.strptime("2013-03-21T14:19:42+0100", "%Y-%m-%dT%H:%M:%S%z") # datetime.datetime(2013, 3, 21, 14, 19, 42, tzinfo=datetime.timezone(datetime.timedelta(0, 3600)))
utc_time_value = orig_dt - orig_dt.utcoffset()
utc_dt = utc_time_value.replace(tzinfo=None) # datetime.datetime(2013, 3, 21, 13, 19, 42)
这是实际代码(内置):
from datetime import datetime, timezone, timedelta
return datetime(yy, mm, dd, hh, min, ss, 0, timezone(timedelta(hours=5))) # +0500
# or
return datetime(yy, mm, dd, hh, min, ss, 0, timezone(timedelta(seconds=18000))) # +0500
我相信.astimezone()
就是你想要的。
from datetime import datetime, timezone
d = datetime.strptime("2013-03-21T14:19:42+0100", "%Y-%m-%dT%H:%M:%S%z") # 2013-03-21 14:19:42+01:00
d.astimezone(timezone.utc) # 2013-03-21 13:19:42+00:00
timezone.utc
在这种情况下不是可选参数: documentation says
If called without arguments (or with
tz=None
) the system local timezone is assumed for the target timezone.
这可能会导致意外行为(取决于您当地的时区)。