2011-09-07 62 views
1

我有一个python应用程序发送电子邮件提醒给不同时区的用户。开始时间设置为给定日期和时间,并且提醒可以设置为开始时间之前的某个分钟数。为什么pytz偏移量不正确?

以前的开发商没有考虑到用户的时区,所以总是是基于服务器的时间发送提醒。

使用pytz documentation,我最初尝试使用UTC的一切,虽然这在发展工作,提醒仍然关闭生产。起初,我认为这是服务器上的NTP问题,但事实并非如此。

我想确认,开发和生产中确实表现不同,所以我创建了一个简单的脚本两者之间的测试:

server_time = datetime.datetime.utcnow() 
print "Server Time:", server_time 

user_timezone = pytz.timezone('America/Montevideo') 
print "User Timezone:", user_timezone 

user_offset = user_timezone.utcoffset(server_time) 
print "Offset:", user_offset 

user_datetime = server_time + user_offset 
print "User Time:", user_datetime 

结果发展(正确):

Server Time: 2011-09-07 16:53:00.711334 
User Timezone: America/Montevideo 
Offset: -1 day, 21:00:00 
User Time: 2011-09-07 13:53:00.71133 

生产结果(不正确):

Server Time: 2011-09-07 16:53:01.767143 
User Timezone: America/Montevideo 
Offset: -1 day, 20:15:00 
User Time: 2011-09-07 13:08:01.767143 

所以它看起来像pytz只是给错误的偏移量。请注意,如果我使用不同的时区,则无关紧要;我试过的每一个都给出了错误的偏移量。

至于在环境的差异,都是Ubuntu的盒子,但生产运行的Python 2.5.2和发展是2.6.2。

有没有很多bugs reported for pytz,我还没有找到任何我搜索的不同偏移量的原因。

因此,这是我的生产服务器上pytz数据有问题?一个pytz bug?或者我对pytz的理解有问题?我错过了什么?

+0

您使用的是基于Debian的服务器?查看开发和生产服务器上的/ usr/share/zoneinfo/America/Montevideo之间的区别 –

回答

2

使用pytz 2010版

$ python test.py 
Server Time: 2011-09-16 00:20:49.479426 
User Timezone: America/Montevideo 
**Offset: -1 day, 20:15:00** wrong! 
User Time: 2011-09-15 20:35:49.479426-03:00 

使用pytz 2011版本

$ python test.py 
Server Time: 2011-09-16 00:36:54.764812 
User Timezone: America/Montevideo 
**Offset: -1 day, 21:00:00** great! 
User Time: 2011-09-15 21:36:54.764812 

看那pytz.VERSION,并确保您使用的至少2011h

>>> import pytz 
>>> pytz.VERSION 
'2011h' 

如果你有2010年,删除并更换:

>>> pytz.__file__ 
/usr/lib/python2.6/dist-packages/pytz/__init__.pyc 

$ sudo rm -r /usr/lib/python2.6/dist-packages/pytz* 
$ sudo pip install pytz == 2011h 
+0

好的工作。偏移量现在是正确的。生产版本是2009a。服务器没有pip,虽然easy_install抱怨“== 2011h”,但确实安装了该软件包。我曾尝试升级pytz,但我手动,而不是使用easy_install。很明显,最新版本的pytz不适用于python 2.5,我没有意识到我只需要更新就可以删除旧版本,并让easy_install为我的python版本提供最新的可用软件包。再次,好的工作。谢谢!现在回到集成... – bogeymin

相关问题