import time
from datetime import datetime
import pytz # $ pip install pytz
from tzlocal import get_localzone # $ pip install tzlocal
# get local timezone
local_tz = get_localzone()
# test it
# utc_now, now = datetime.utcnow(), datetime.now()
ts = time.time()
utc_now, now = datetime.utcfromtimestamp(ts), datetime.fromtimestamp(ts)
local_now = utc_now.replace(tzinfo=pytz.utc).astimezone(local_tz) # utc -> local
assert local_now.replace(tzinfo=None) == now
^{} module 返回与本地时区对应的pytz tzinfo对象:
即使在夏令时转换期间,当本地时间可能不明确时,它也能工作。
local_tz
也适用于过去的日期,即使当时本地时区的utc偏移量不同。^基于{dateutil返回错误的UTC+4偏移量,而不是1970-01-01的正确的UTC+3。
对于那些在2017年遇到这种情况的人来说,{}仍然是破碎的。上面的例子现在可以工作了,因为当前的utf偏移量在莫斯科是UTC+3(意外地等于1970年的UTC偏移量)。为了演示错误,我们可以选择utc偏移量为utc+4的日期:
dateutil在2014-06-01返回错误的UTC+3偏移量,而不是正确的UTC+4。
解决这个问题的一个非常简单的方法是:
更新:@MartijnPieters说“这不适用于DST/summertime”。那么这个版本呢?
使用^{} package 中的^{} function :
在内部,这是一个使用
time.timezone
和time.altzone
(基于time.daylight
进行切换)的类,但从中创建合适的时区对象。您使用这个来代替一个
pytz
时区的。另一种方法是从操作系统读取当前配置的时区,但这与操作系统之间的差别很大。在Mac OS X上,您需要读取
systemsetup -gettimezone
的输出:在Debian和Ubuntu系统上,您可以读取
/etc/timezone
:在RedHat和direved系统上,您需要从
/etc/sysconfig/clock
中读取它:相关问题 更多 >
编程相关推荐