Django web应用程序的一部分是一个会议调度程序,它对时区敏感。
目前它正在使用pytz,但这有一些严重的缺点。
例如,由于梅德韦杰夫总统最近决定取消俄罗斯冬季时间的转换,莫斯科的时区目前缩短了1小时http://en.ria.ru/russia/20111030/168271560.html)
另一个严重的问题是,它提供的时区列表很长,对用户非常不友好,例如"亚洲/香格里拉"。大多数提供时区选择组合框的严肃网站的列表要短得多。。。
我正在寻找一些可靠的解决方案,为用户提供准确的时区和友好的时区选择,无论是作为一个在俄罗斯发生重大变化时更新的库,还是作为一个可靠免费的网络服务。
-
您需要获得
pytz
的版本,该版本包含最新的Olson/Eggert数据库,该数据库尊重俄罗斯最近的时区政策变化。然而,显然有一场针对维护者的版权诉讼正在进行中,所以这可能在一段时间内不会发生。http://en.wikipedia.org/wiki/Tz_database#Maintenance我想您可以获得pytz
源代码并自己贡献一个补丁。但据我所知,所有或几乎所有运行良好的时区系统都是基于奥尔森/埃格特系统。 -
您可以通过使用提供的各种查找来简化用户体验。
pytz.common_timezones
是仅对用户可能最重要的时区标识符的修剪列表。pytz.country_names
是用于向用户显示的国家代码到国家名称(英语)的字典。pytz.country_timezones
是该国家的时区列表的国家代码字典。通过使用这些选项,您可以让用户选择他们的国家/地区,然后选择该国家/地区最适用的时区,可以选择只在common_timezones
列表中显示选项。 -
也许我见过的选择时区最简单的用户界面是世界地图,你可以在地图上点击你的位置,它会显示出哪个可能是奥尔森/埃格特时区。Ubuntu中的这个用户界面声称基于http://www.geonames.org/.除此之外,我认为
pytz
或者可能链接到的times
模块jcollado是最好的。政治时区是复杂的,因此任何使用它们的代码都是复杂的。
还请考虑我对前面关于自动确定浏览器时区的问题的回答。在评论中链接的JavaScript中通常有一种正确的方法。
最近我在reddit上看到了时间公告,这是一个旨在轻松处理日期时间对象和时区的库。
也许这个图书馆没有考虑到你提到的关于莫斯科时区的问题。然而,由于该库正在积极开发中(上一次更改是在不到一天前提交的),我认为主要开发人员愿意提供帮助,接受补丁等。