19

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

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

4

6 回答 6

27

感谢各位的回答,但看起来这些城市名称只是 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", ... )。

我创建了一个包含 NSDictionary 属性的 plist 文件,该属性可轻松用于映射。

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

于 2012-05-02T10:42:51.807 回答
13

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

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

希望这对您有所帮助。

于 2012-09-19T11:13:24.830 回答
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"]]
于 2012-04-30T12:37:58.947 回答
1
NSArray *zones = [NSTimeZone knownTimeZoneNames];

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

您必须setTime像下面这样进行分区,您已经尝试过。

[NSTimeZone timeZoneWithName:@"Asia/Tokyo"];
于 2012-04-30T12:04:15.640 回答
0

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

于 2012-04-30T11:59:22.787 回答
0
NSString * TimeZoneName=[[NSTimeZone localTimeZone]name];
于 2017-07-21T13:10:54.603 回答