如果我只有曼谷或东京这样的城市名称,如何在 [NSTimeZone timeZoneWithName:@"Asia/Tokyo"]
哪里还有大陆和斜杠在城前?
我已经试过[NSTimeZone timeZoneWithName:@"Tokyo"]
了,它不起作用。
感谢您的回答,但看起来这些城市名称只是Rails"ActiveSupport::TimeZone"使用的一种格式。所以我只需要把它映射回来。映射在这里 -> http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html
它将时区从Rails"ActiveSupport::TimeZone"格式映射到iOS使用的另一种格式(例如"国际日期变更线西部"=>"太平洋/中途岛","中途岛"=>"太平洋/中途岛","萨摩亚"=>"太平洋/Pago_Pago",...)。
我创建了一个包含 NSDictionary 属性的 plist 文件,可以轻松用于映射。
编辑:Rails 3.2的更新版本(带有使用示例)(感谢RJ Regenold!
您可以查看所有时区名称的列表。
NSLog(@"%@", [NSTimeZone knownTimeZoneNames]);
希望这对您有所帮助。
如果他们都在亚洲,为什么不使用这样的东西:
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"]]
NSArray *zones = [NSTimeZone knownTimeZoneNames];
它返回系统支持的所有时区集。
您必须像下面这样setTime
区域,您已经尝试过了。
[NSTimeZone timeZoneWithName:@"Asia/Tokyo"];
发现数据集和/或 API http://www.geonames.org/在解决此类问题时很有用。他们拥有大量位置的正确奥尔森时区(这就是"亚洲/东京"的名称),您可以自己下载和整理数据,也可以使用他们的 API 来获取您需要的内容。
NSString * TimeZoneName=[[NSTimeZone localTimeZone]name];