【问题标题】:How to use NSTimeZone -timeZoneWithName: with a city name from Rails ActiveSupport?如何使用 NSTimeZone -timeZoneWithName: 与 Rails ActiveSupport 中的城市名称?
【发布时间】:2012-05-10 02:36:01
【问题描述】:

如果我只有像 BangkokTokyo 这样的城市名称,我如何在 [NSTimeZone timeZoneWithName:@"Asia/Tokyo"]哪里还有大陆和城市前面的斜线?

我已经试过[NSTimeZone timeZoneWithName:@"Tokyo"],还是不行。

【问题讨论】:

    标签: ios timezone nstimezone activesupport


    【解决方案1】:

    感谢大家的回答,但看起来这些城市名称只是 Rails "ActiveSupport::TimeZone" 使用的一种格式。所以我只需要把它映射回来。映射在这里 -> http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html

    它将时区从 Rails "ActiveSupport::TimeZone" 格式映射到 iOS 使用的另一种格式(例如 "International Date Line West" => "Pacific/Midway"、"Midway Island" => "Pacific/Midway"、 "萨摩亚" => "Pacific/Pago_Pago", ... )。

    我创建了a plist file,其中包含一个可轻松用于映射的 NSDictionary 属性。

    编辑:an updated version(带有使用示例)用于 Rails 3.2(感谢 RJ Regenold!)

    【讨论】:

    • 感谢您的推荐。对于 Twitter 用户“time_zone”转换非常有用。
    • 这是 Rails 3.2 的更新版本(带有使用示例):gist.github.com/rjregenold/5243201
    【解决方案2】:

    您可以查看所有时区名称的列表。

    NSLog(@"%@", [NSTimeZone knownTimeZoneNames]);
    

    希望这对你有帮助。

    【讨论】:

      【解决方案3】:

      如果他们都在亚洲,为什么不使用类似的东西:

      MYCITY=Tokyo
      [NSTimeZone timeZoneWithName:@"Asia/$MYCITY"]
      

      如果您需要更多城市和时区,您可以根据在 /usr/share/zoneinfo 中找到的所有时区创建一个静态文本列表文件。

      使用以下文本创建文件“timezones.by.city.txt”。 (此处截断。)

      "Asia/Aden"
      "Asia/Almaty"
      "Asia/Amman"
      "Asia/Anadyr"
      "Asia/Aqtau"
      "Asia/Aqtobe"
      "Asia/Ashgabat"
      "Asia/Ashkhabad"
      "Asia/Baghdad"
      "Asia/Bahrain"
      "Asia/Baku"
      "Asia/Bangkok"
      "Asia/Beirut"
      "Asia/Bishkek"
      ... etc.
      "US/Alaska"
      "US/Aleutian"
      "US/Arizona"
      "US/Central"
      "US/Eastern"
      "US/East-Indiana"
      "US/Hawaii"
      "US/Indiana-Starke"
      "US/Michigan"
      "US/Mountain"
      "US/Pacific"
      "US/Pacific-New"
      "US/Samoa"
      

      然后:

      MYCITY=Bangkok
      MYTZ=`grep "$MYCITY" ./timezones.by.city.txt`
      [df setTimeZone:[NSTimeZone timeZoneWithName:@"$MYTZ"]]
      

      【讨论】:

      • 不,他们并不全在亚洲。 grep 是什么东西?
      【解决方案4】:
      NSArray *zones = [NSTimeZone knownTimeZoneNames];
      

      它返回系统支持的所有时区集。

      您必须像下面这样setTime 区域,您已经尝试过了。

      [NSTimeZone timeZoneWithName:@"Asia/Tokyo"];
      

      【讨论】:

      • 是的,我已经知道了。但我不能只将 Tokyo 更改为 Asia/Tokyo,因为我的名字也与我从 [NSTimeZone knownTimeZoneNames]; 得到的完全不同。
      【解决方案5】:

      您可能会发现来自http://www.geonames.org/ 的数据集和/或 API 对解决此类问题很有用。他们为大量地点提供正确的 olsen 时区(即“亚洲/东京”的名称),您可以自己下载和整理数据,也可以使用他们的 API 来获取您需要的信息。

      【讨论】:

      【解决方案6】:
      NSString * TimeZoneName=[[NSTimeZone localTimeZone]name];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-21
        • 1970-01-01
        相关资源
        最近更新 更多