任务:
允许站点访问者选择时区的时区选择器小部件应该生成并填充合理的数据。它应该提供这样的选择:
GMT-11 (HH:MM actual time in that zone)
GMT-10 (...)
GMT-1 (...)
... now for the tricky part:
GMT (...)
GMT+1 (...)
... and then all the way until +12.当用户选择不同的时区时,服务器应该能够确定要设置的时区。一旦列表中填充了正确的数据,第二部分就不会有什么问题了。
问题:
棘手的部分是获取实际时区,这些时区目前正在全球范围内使用。我知道如何获得整个时区列表,以及如何获取它们的偏移量和当前的DST设置。但是,每个时区有两个变体:规则时间和DST时间。
在上面的列表中,我标记了某些“棘手”的部分。这就是像欧洲/伦敦这样的时区。在正常时间,欧洲/伦敦=格林尼治标准时间,但在DST期间,欧洲/伦敦=GMT+1.你能看到问题吗?
同样困扰我的是,并非所有时区都会从DST变为常规时间,反之亦然,所以我不能仅仅用-11 = GMT-11,-10 = GMT-10,.之类的通用数据填充列表。然后应用一些逻辑来定位具有适当时差的时区,然后将该时区设置为缺省值。
我很想知道其他利用时区切换功能的网站是如何根据用户的选择提出一个时区列表和选择正确时区的逻辑的?还有什么你想加的还是问的?
发布于 2010-09-03 17:37:28
看看谷歌日历做了什么。它显示标准时间偏移量以及城市名称。
(GMT+01:00) Tunis这似乎是一个相当合理的方式来代表他们,我也是。另一方面,我知道一些UI列出了当前与UTC以及城市的偏移量。老实说,不管怎么说,你都会把人搞糊涂的。
发布于 2010-09-03 17:48:02
时区数据最常用的来源是tz/zoneinfo数据库--它是免费的。
正如您自己已经注意到的,时区是一个政治/管理实体,包括一个基本偏移量、DST切换日期,甚至是关于这些更改的历史数据,您需要正确处理历史日期(如正式不存在的六分钟半钟)。
因此,tz数据库(以及使用它的大多数应用程序)不是通过基本偏移,而是通过使用它的大城市的名称来表示时区,通常是使用特定时区的国家的首都。例如:“欧洲/柏林”或“澳大利亚/达尔文”。
https://stackoverflow.com/questions/3638134
复制相似问题