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