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

Hlu*_*ung 18 timezone activesupport nstimezone ios

如果我只有像曼谷东京这样的城市名称,我怎样才能[NSTimeZone timeZoneWithName:@"Asia/Tokyo"]在城市前面的大陆和斜线上提供时区参数 ?

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

Hlu*_*ung 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","Samoa" >"太平洋/ Pago_Pago",......).

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

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

  • 这是Rails 3.2的更新版本(带有使用示例):https://gist.github.com/rjregenold/5243201 (2认同)

tag*_*kaZ 12

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

NSLog(@"%@", [NSTimeZone knownTimeZoneNames]);
Run Code Online (Sandbox Code Playgroud)

希望这对你有所帮助.


Chr*_*ris 5

如果他们都在亚洲,为什么不使用以下内容:

MYCITY=Tokyo
[NSTimeZone timeZoneWithName:@"Asia/$MYCITY"]
Run Code Online (Sandbox Code Playgroud)

如果您需要更多城市和时区,可以根据/ 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"
Run Code Online (Sandbox Code Playgroud)

然后:

MYCITY=Bangkok
MYTZ=`grep "$MYCITY" ./timezones.by.city.txt`
[df setTimeZone:[NSTimeZone timeZoneWithName:@"$MYTZ"]]
Run Code Online (Sandbox Code Playgroud)