我正在寻找一些帮助,如何在Rails中存储正确的时区,从提供UTC偏移的数据和DST。
数据来自http://openflights.org/data.html
时区小时偏离UTC。小数小时表示为小数,例如。印度是5.5。
DST 夏令时。 E(欧洲),A(美国/加拿大),S(南美洲),O(澳大利亚),Z(新西兰),N(无)或U(未知)之一。
我想知道如何在Rails中使用这些数据将这些机场的时区存储为Rails可识别的时区列中的字符串。
答案 0 :(得分:0)
除非您创建DST和偏移到特定时区的自定义映射,否则我认为没有解决方案。
我最终使用geonames.org网络服务,根据纬度/经度找出时区。
答案 1 :(得分:0)
我在美国邮政编码数据库的稍微简单的情况下需要相同的功能,其中包括UTC小时偏移量和Y / N字段,表明它是否参与夏令时,因此此数据库中的West Coast USA zipcodes都具有& #34; -8"和" 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
...