mde / timezone-js - 与多个城市一起使用? (目前只有少数城市像印度的加尔各答)

时间:2013-01-11 07:12:29

标签: javascript datetime timezone dst

https://github.com/mde/timezone-js

以上使用以下方式返回特定时区的日期:

var dt = new timezoneJS.Date('America/New_York');
var dt = new timezoneJS.Date('Asia/Kolkata');

根据我的研究,它接受的城市很少(就像印度的加尔各答)。我怎样才能与所有国家的所有主要城市合作?

1 个答案:

答案 0 :(得分:0)

这是tz@iana.org邮件列表中反复讨论的主题。基本答案是每个时区的Olson数据库中都有一个名称,而印度则是亚洲/加尔各答(例如,美国,太平洋时区由America / Los_Angeles确定)。通常,使用的名称标识一个大陆,并且是在首次创建列表时时区中最大的城市(还有其他标准;它们记录在Olson数据库数据附带的Theory文件中)。这些名称供内部使用;它们对人类来说是半有意义的,但它们并没有以最好的方式呈现(没有国家,有下划线的名字取代空白,英国名字等)。

建议的处理方法是创建自己的城市名称列表,可能还有国家/地区信息,并将每个城市名称映射到相应的时区。

请注意,彻底这样做真的很难。有些区域非常小。最近一直在讨论的是欧洲/布辛根;这是一个德国人的“飞地”,并不总是与周围的瑞士州同时改变时间,而是留在柏林时间(或者那些时候)。你在美国的部分地区遇到类似的问题;印第安纳州有许多地方,其中冬季和夏季(标准和夏令时)的时间有所不同,有些地方在东部时区,有些在中环,有些地方根本没有改变时区(所以时间区域与冬季的东部和夏季的中部相同)。在中国有一个城镇(地区)汉族(中国)人口使用中国时间(亚洲/上海,UTC + 08:00),但当地人口使用不同的时区(UTC + 06:00);同一个地方,不同时区适合不同的人。该地区是新疆;该条目是亚洲/乌鲁木齐。


您可以从以下网址下载数据和代码:

我不确定IANA网站是否提供所有历史版本。

您需要知道此表示法的当前版本号(2012j - 2012年第10版,2012-11-12发布)。一般的“最新”版本链接是:

这些名称不会更改,因此他们将始终检索最新版本。但是,文件名不会告诉您当前版本是什么;你必须向内看才能发现 - 你赢了一些,你就失去了一些。