如何使用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];