from datetime import datetime, timezone
def utc_to_local(utc_dt):
return utc_dt.replace(tzinfo=timezone.utc).astimezone(tz=None)
在Python 2/3中:
import calendar
from datetime import datetime, timedelta
def utc_to_local(utc_dt):
# get integer timestamp to avoid precision lost
timestamp = calendar.timegm(utc_dt.timetuple())
local_dt = datetime.fromtimestamp(timestamp)
assert utc_dt.resolution >= timedelta(microseconds=1)
return local_dt.replace(microsecond=utc_dt.microsecond)
使用pytz(都是Python 2/3):
import pytz
local_tz = pytz.timezone('Europe/Moscow') # use your local timezone name here
# NOTE: pytz.reference.LocalTimezone() would produce wrong result here
## You could use `tzlocal` module to get local timezone on Unix and Win32
# from tzlocal import get_localzone # $ pip install tzlocal
# # get local timezone
# local_tz = get_localzone()
def utc_to_local(utc_dt):
local_dt = utc_dt.replace(tzinfo=pytz.utc).astimezone(local_tz)
return local_tz.normalize(local_dt) # .normalize might be unnecessary
在Python3.3+中:
在Python 2/3中:
使用
pytz
(都是Python 2/3):示例
输出
Python3.3 Python2 皮茨注:它考虑了DST和最近更改的MSK时区的utc偏移量。
我不知道非pytz解决方案是否适用于Windows。
不能只使用标准库,因为标准库没有任何时区。你需要pytz或dateutil。
或者,通过实现自己的时区,您可以在不使用pytz或dateutil的情况下完成这项工作。但那太傻了。
你不能用标准库。使用pytz模块,您可以将任何原始/感知日期时间对象转换为任何其他时区。让我们看一些使用Python3的例子。
要将一个天真的对象转换为任何其他时区,首先必须将其转换为感知的日期时间对象。您可以使用
replace
方法将一个天真的datetime对象转换为一个感知的datetime对象。然后要将感知的datetime对象转换为任何其他时区,可以使用astimezone
方法。变量
pytz.all_timezones
提供pytz模块中所有可用时区的列表。因为
now
方法返回当前日期和时间,所以必须首先使date time对象时区知道。localize
函数将一个原始的datetime对象转换为一个时区感知的datetime对象。然后可以使用astimezone
方法将其转换为另一个时区。相关问题 更多 >
编程相关推荐