根据国家名称转换时区4

时间:2015-11-10 05:37:03

标签: ruby-on-rails-4 timezone

在我的rails 4.0应用程序中,我有“随时随地”模块,用户可以在办理登机手续或从世界任何地方退房时保存旅程。现在,如果假设我的朋友已在伦敦的一家酒店办理登机手续,并且根据伦敦时区的登记时间是上午8:00,同时根据印度时区,印度时间是上午10:00。现在,假设我在上午10点从印度登录我的应用程序,然后我应该收到消息说“你的朋友刚刚在伦敦检查了我们,酒店xyz在上午10点”,即时区应该按照印度时区。 目前我可以借助IP地址获取用户的国家/地区名称,然后我想根据该国家/地区名称转换时区。我怎么能这样做?

我使用此链接获取国家/地区名称                                 Getting a user country name from originating IP address with Ruby on Rails

1 个答案:

答案 0 :(得分:2)

您需要使用国家/地区代码与Country库中的TZInfo类一起使用默认情况下应该在rails中使用,我想知道您将对多次使用的国家/地区做些什么 - 区域,如俄罗斯,美国,加拿大。无论如何,对于一个小国家:

2.2.1 :001 > c = TZInfo::Country.get('MD')
 => #<TZInfo::Country: MD> 
2.2.1 :002 > c.zone_identifiers
 => ["Europe/Chisinau"] 
2.2.1 :003 > c.zones
 => [#<TZInfo::TimezoneProxy: Europe/Chisinau>] 
2.2.1 :004 > c = TZInfo::Country.get('US')

更大的一个:

2.2.1 :004 > c = TZInfo::Country.get('US')
 => #<TZInfo::Country: US> 
2.2.1 :005 > c.zone_identifiers
 => ["America/New_York", "America/Detroit", "America/Kentucky/Louisville", "America/Kentucky/Monticello", "America/Indiana/Indianapolis", "America/Indiana/Vincennes", "America/Indiana/Winamac", "America/Indiana/Marengo", "America/Indiana/Petersburg", "America/Indiana/Vevay", "America/Chicago", "America/Indiana/Tell_City", "America/Indiana/Knox", "America/Menominee", "America/North_Dakota/Center", "America/North_Dakota/New_Salem", "America/North_Dakota/Beulah", "America/Denver", "America/Boise", "America/Phoenix", "America/Los_Angeles", "America/Metlakatla", "America/Anchorage", "America/Juneau", "America/Sitka", "America/Yakutat", "America/Nome", "America/Adak", "Pacific/Honolulu"] 
2.2.1 :006 > c.zones
 => [#<TZInfo::TimezoneProxy: America/New_York>, #<TZInfo::TimezoneProxy: America/Detroit>, #<TZInfo::TimezoneProxy: America/Kentucky/Louisville>, #<TZInfo::TimezoneProxy: America/Kentucky/Monticello>, #<TZInfo::TimezoneProxy: America/Indiana/Indianapolis>, #<TZInfo::TimezoneProxy: America/Indiana/Vincennes>, #<TZInfo::TimezoneProxy: America/Indiana/Winamac>, #<TZInfo::TimezoneProxy: America/Indiana/Marengo>, #<TZInfo::TimezoneProxy: America/Indiana/Petersburg>, #<TZInfo::TimezoneProxy: America/Indiana/Vevay>, #<TZInfo::TimezoneProxy: America/Chicago>, #<TZInfo::TimezoneProxy: America/Indiana/Tell_City>, #<TZInfo::TimezoneProxy: America/Indiana/Knox>, #<TZInfo::TimezoneProxy: America/Menominee>, #<TZInfo::TimezoneProxy: America/North_Dakota/Center>, #<TZInfo::TimezoneProxy: America/North_Dakota/New_Salem>, #<TZInfo::TimezoneProxy: America/North_Dakota/Beulah>, #<TZInfo::TimezoneProxy: America/Denver>, #<TZInfo::TimezoneProxy: America/Boise>, #<TZInfo::TimezoneProxy: America/Phoenix>, #<TZInfo::TimezoneProxy: America/Los_Angeles>, #<TZInfo::TimezoneProxy: America/Metlakatla>, #<TZInfo::TimezoneProxy: America/Anchorage>, #<TZInfo::TimezoneProxy: America/Juneau>, #<TZInfo::TimezoneProxy: America/Sitka>, #<TZInfo::TimezoneProxy: America/Yakutat>, #<TZInfo::TimezoneProxy: America/Nome>, #<TZInfo::TimezoneProxy: America/Adak>, #<TZInfo::TimezoneProxy: Pacific/Honolulu>]