如何使用NSTimeZone -timeZoneWithName:来自Rails ActiveSupport的城市名称?

时间:2012-04-30 11:28:51

标签: ios timezone nstimezone activesupport

如果我只有 Bangkok Tokyo 这样的城市名称,我该如何提供时区参数 [NSTimeZone timeZoneWithName:@"Asia/Tokyo"]在城市面前还有大陆和斜线?

我已经尝试[NSTimeZone timeZoneWithName:@"Tokyo"],但它不起作用。

6 个答案:

答案 0 :(得分:26)

感谢大家的答案,但看起来这些城市名称只是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” “,”萨摩亚“=>”太平洋/ Pago_Pago“,......)。

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

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

答案 1 :(得分:12)

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

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

希望这会对你有所帮助。

答案 2 :(得分:5)

如果他们都在亚洲,为什么不使用像:

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"]]

答案 3 :(得分:1)

NSArray *zones = [NSTimeZone knownTimeZoneNames];

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

您必须setTime区域,如下所示,您已尝试过。

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

答案 4 :(得分:0)

您可能会发现http://www.geonames.org/中的数据集和/或API对解决此类问题非常有用。他们拥有正确的奥尔森时区(这就是所谓的'亚洲/东京'),你可以自己下载和争论数据,或者使用他们的API来获得你需要的东西。

答案 5 :(得分:0)

NSString * TimeZoneName=[[NSTimeZone localTimeZone]name];