首先,我要说一下我的时区是CET/CEST。它从CEST变成CET的确切时间(从GMT+2的夏令时到GMT+1的标准时间)总是在10月的最后一个星期日早上3点。2010年是在10月31日早上3点。
现在注意以下几点:
>>> import datetime
>>> import pytz.reference
>>> local_tnz = pytz.reference.LocalTimezone()
>>> local_tnz.utcoffset(datetime.datetime(2010, 10, 31, 2, 12, 30))
datetime.timedelta(0, 3600)
如上所述,这是错误的。
>>> local_tnz.utcoffset(datetime.datetime(2010, 10, 30, 2, 12, 30))
datetime.timedelta(0, 7200)
>>> local_tnz.utcoffset(datetime.datetime(2010, 10, 31, 2, 12, 30))
datetime.timedelta(0, 7200)
现在它突然正确了 :/
我知道已经有几个关于这个问题的提问,但是给出的解决方案总是“使用本地化”,但我的问题是LocalTimezone没有提供该方法。
事实上,我有几个毫秒级别的时间戳,我需要本地时区的utc偏移量(不仅仅是我的时区,还有任何使用程序的人的时区)。 其中之一是1288483950000或Sun Oct 31 2010 02:12:30 GMT+0200(CEST)在我的时区。
目前,我通过以下方式获取日期时间对象:
datetime.datetime.fromtimestamp(int(int(millis)/1E3))
可以使用以下代码获取时区偏移(单位为分钟):
-int(local_tnz.utcoffset(date).total_seconds()/60)
很不幸,这在许多情况下是错误的 :(。
有什么想法吗?
注意:我正在使用python3.2.4,但在这种情况下应该无所谓。
编辑:
感谢@JamesHolderness,我已找到解决方案:
def datetimeFromMillis(millis):
return pytz.utc.localize(datetime.datetime.utcfromtimestamp(int(int(millis)/1E3)))
def getTimezoneOffset(date):
return -int(date.astimezone(local_tz).utcoffset().total_seconds()/60)
使用 tzlocal 模块中的 tzlocal.get_localzone() 将 local_tz 设为本地时区。
datetime.timedelta(0,3600)
,datetime.timedelta(0,7200)
和datetime.timedelta(0,3600)
。在运行测试之前,我将时区设置为CET。 - martineau