如何使用 NSTimeZone -timeZoneWithName: 与 Rails ActiveSupport 中的城市名称?
Posted
技术标签:
【中文标题】如何使用 NSTimeZone -timeZoneWithName: 与 Rails ActiveSupport 中的城市名称?【英文标题】:How to use NSTimeZone -timeZoneWithName: with a city name from Rails ActiveSupport? 【发布时间】:2012-05-10 02:36:01 【问题描述】:如果我只有像 Bangkok 或 Tokyo 这样的城市名称,我如何在
[NSTimeZone timeZoneWithName:@"Asia/Tokyo"]
哪里还有大陆和城市前面的斜线?
我已经试过[NSTimeZone timeZoneWithName:@"Tokyo"]
,还是不行。
【问题讨论】:
【参考方案1】:感谢大家的回答,但看起来这些城市名称只是 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"、 "萨摩亚" => "Pacific/Pago_Pago", ... )。
我创建了a plist file,其中包含一个可轻松用于映射的 NSDictionary 属性。
编辑:an updated version(带有使用示例)用于 Rails 3.2(感谢 RJ Regenold!)
【讨论】:
感谢您的推荐。对于 Twitter 用户“time_zone”转换非常有用。 这是 Rails 3.2 的更新版本(带有使用示例):gist.github.com/rjregenold/5243201【参考方案2】:您可以查看所有时区名称的列表。
NSLog(@"%@", [NSTimeZone knownTimeZoneNames]);
希望这对你有帮助。
【讨论】:
【参考方案3】:如果他们都在亚洲,为什么不使用类似的东西:
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"]]
【讨论】:
不,他们并不全在亚洲。grep
是什么东西?【参考方案4】:
NSArray *zones = [NSTimeZone knownTimeZoneNames];
它返回系统支持的所有时区集。
您必须像下面这样setTime
区域,您已经尝试过了。
[NSTimeZone timeZoneWithName:@"Asia/Tokyo"];
【讨论】:
是的,我已经知道了。但我不能只将 Tokyo 更改为 Asia/Tokyo,因为我的名字也与我从[NSTimeZone knownTimeZoneNames];
得到的完全不同。【参考方案5】:
您可能会发现来自http://www.geonames.org/ 的数据集和/或 API 对解决此类问题很有用。他们为大量地点提供正确的 olsen 时区(即“亚洲/东京”的名称),您可以自己下载和整理数据,也可以使用他们的 API 来获取您需要的信息。
【讨论】:
谢谢,但不幸的是,我在那里找到的时区数据 (download.geonames.org/export/dump/timeZones.txt) 与我拥有的城市名称不同。所以我不能使用它。我已经发布了一个答案,您可以查看:)【参考方案6】:NSString * TimeZoneName=[[NSTimeZone localTimeZone]name];
【讨论】:
以上是关于如何使用 NSTimeZone -timeZoneWithName: 与 Rails ActiveSupport 中的城市名称?的主要内容,如果未能解决你的问题,请参考以下文章
UILocalNotification 和 NSTimeZone,出现错误的时区
是否可以从 CLLocation(或 CLLocationCoordinates2D)获取 NSTimeZone 实例?
检测 [NSTimeZone localTimezone] secondsFromGMT 属性变化