Rails时区从偏移和dst



我正在寻找一些帮助,如何在Rails中存储正确的时区,从数据中为我提供UTC偏移量和DST。

数据来自http://openflights.org/data.html

Timezone与UTC的小时偏移量。小数小时用小数表示。印度是5.5。

DST夏令时。E(欧洲),A(美国/加拿大),S(南美),O(澳大利亚),Z(新西兰),N(无)或U(未知)中的一个。

我想知道如何在Rails中使用此数据将这些机场的时区存储为Rails可以识别的timezone列中的字符串。

我不认为有一个解决方案,除非你创建一个自定义的DST映射和偏移到一个特定的时区。

我最终使用了geonames.org webservice,来查找基于纬度/经度的时区。

我需要在稍微简单的美国邮政编码数据库中使用相同的功能,该数据库包含UTC小时偏移量和Y/N字段,表明它是否参与日光节约时间,因此该数据库中的美国西海岸邮政编码都有"-8"one_answers"Y"。

我找不到一个内置的Rails方法来做到这一点,所以我手动创建了一个查找哈希,其中关键是UTC &DST字段串接,例如,"#{utc}#{DST}",值为时区名称。此方法也可以用于utc偏移量,如"5.5"。

在进行查找的方法中给出utc和dst值,我指定了一个默认时区(例如美国西海岸),在这种情况下,哈希查找返回nil,因为一个意外的值,如"-5N"(因为东海岸没有任何不应该发生的非dst状态)。

但是同样的方法可以通过创建一个散列来全局应用,该散列表示所有可能的时区,其中包含夏令时的Y和N值。

class MyZip
HOUR_DST_TO_TIMEZONE_NAME = {
  "-5Y" => "Eastern Time (US & Canada)",
  "-6Y" => "Central Time (US & Canada)",
  "-7Y" => "Mountain Time (US & Canada)",
  "-7N" => "Arizona",
  "-8Y" => "Pacific Time (US & Canada)",
  "-9Y" => "Alaska",
  "-10N" => "Hawaii"
  }
def self.timezone_name_from_zip_hour_dst(utc, dst)
  key = "#{utc}#{dst}" 
  return HOUR_DST_TO_TIMEZONE_NAME[key] || MyZip.unknown_timezone_name
end
...

相关内容

  • 没有找到相关文章