如何在Ruby中确定给定城市、州的时区(EST、PST、MST、CST、AKST、HST)?

如何在Ruby中确定给定城市、州的时区(EST、PST、MST、CST、AKST、HST)?,ruby,ruby-on-rails-3,datetime,rubygems,timezone,Ruby,Ruby On Rails 3,Datetime,Rubygems,Timezone,所以我写了一个Ruby脚本,比如给定一个城市,一个州,比如纽约,你可以得到一个时区字符串,比如“America/NewYork”。我使用了地理编码器和时区宝石。但是,有没有一种简单的方法(即内置函数或库)将“美国/纽约”映射到“EST”呢?将城市、州映射到EST/PST/etc是我追求的真正结果。我不是Ruby程序员,但我知道您要查找的缩写信息包含在tzdb数据库中。我浏览了RubyGem的源代码,但没有找到任何关于缩写的内容,因此我猜测该库的作者认为它没有价值,因此没有将其包含在解析器中。(这

所以我写了一个Ruby脚本,比如给定一个城市,一个州,比如纽约,你可以得到一个时区字符串,比如“America/NewYork”。我使用了地理编码器和时区宝石。但是,有没有一种简单的方法(即内置函数或库)将“美国/纽约”映射到“EST”呢?将城市、州映射到EST/PST/etc是我追求的真正结果。

我不是Ruby程序员,但我知道您要查找的缩写信息包含在tzdb数据库中。我浏览了RubyGem的源代码,但没有找到任何关于缩写的内容,因此我猜测该库的作者认为它没有价值,因此没有将其包含在解析器中。(这只是一个假设。)

我确实找到了tzdb数据库的另一个Ruby实现,名为,它似乎公开了每个区域的缩写属性。您可能希望调查使用该库。不过,我不能提供具体的建议,说明哪一个总体上更好


正如其他人在评论中警告的那样,请确保您仅将缩写用于显示目的。它只对人类有意义,而且只有当他们有一些其他的背景,比如他们的位置。在世界范围内,时区缩写并不是唯一的。他们之间有很多模棱两可的地方。您可以看到一个。

请澄清:您想从位置确定时区(例如,纽约地图--->时区“美国/纽约”),或者您想确定特定时区的缩写(例如,地图时区“美国/纽约”-->冬季的“EST”或夏季的“EDT”)?你的问题标题说你在时区名称(“美国/纽约”)之后,但最后一句暗示你想要一个缩写。另外:如果你想要缩写,我希望你不打算将它们用作键/标识符,因为它们不是唯一的(例如,“美国/纽约”和“澳大利亚/悉尼”都使用“EST”)在许多时区,它们每年改变两次(例如“美国/纽约”同时使用“东部标准时间”和“东部标准时间”),我认为我们在这里遗漏了一些东西。为什么你想以时区的名字结束?你想用它做什么?你必须按邮政编码来做,因为有些州被分成多个时区。是目前为止最糟糕的。@tadman-奥尔森/tzdb时区标识符已经捕捉到了这些信息。缩写词也在tzdb数据库中,尽管我不确定OP使用的ruby gem是否公开了它。