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

如果我只有曼谷东京这样的城市名称,我该如何在[NSTimeZone timeZoneWithName:@"Asia/Tokyo"]中提供一个时区参数,在那里它也有大陆和斜线在城市前面?

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

感谢答案的人,但它看起来像这些城市名称只是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”,“Samoa” =>“Pacific / Pago_Pago”,…)。

我创build了一个包含NSDictionary属性的plist文件 ,可以很容易地用于映射。

编辑:Rails 3.2 的更新版本 (使用示例)(谢谢RJ Regenold!)

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

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

希望这会对你有所帮助。

如果他们都在亚洲,为什么不使用像这样的东西:

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

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

使用以下文本创build文件“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"]] 
 NSArray *zones = [NSTimeZone knownTimeZoneNames]; 

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

你必须像下面那样设置时区,你已经尝试过了。

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

您可以从http://www.geonames.org/find数据集和/或API来解决这类问题。 他们拥有正确的奥尔森时区(这就是所谓的“亚洲/东京”),您可以自己下载和编辑数据,也可以使用他们的API来获得所需的信息。

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