我有一个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的理解有问题?我错过了什么?
您使用的是基于Debian的服务器?查看开发和生产服务器上的/ usr/share/zoneinfo/America/Montevideo之间的区别 –