iPhone NSTimeZone:localTimeZone混乱

时间:2009-11-15 05:34:13

标签: iphone ruby-on-rails objective-c nstimezone

据我所知,致电

NSLog(@"Local Time Zone %@",[[NSTimeZone localTimeZone] name]);

为您提供设备的本地时区。它给我的是“US / Central”,我在 [NSTimeZone abbreviationDictionary] 的缩写列表或时区列表中的任何位置都找不到 [NSTimeZone knownTimeZoneNames] 中的名称。这个来自哪里?我需要将当前设备时区传递给Rails应用程序,它理解“澳大利亚/悉尼”“America / Chicago”等内容,但不是 “美/中环”

我如何获取localTimeZone给我的内容并将其转换为Rails可以理解的字符串(即knownWoneNames中的任何时区,假设是系统知道的所有时区名称约?)

2 个答案:

答案 0 :(得分:5)

您可能在不需要ActiveSupport::TimeWithZone gem:

的情况下使用tzinfo
$ irb -rrubygems -ractivesupport -rtzinfo
>> Time.send(:get_zone, "US/Central").now
=> Tue, 17 Nov 2009 04:27:23 CST -06:00

如果您不需要tzinfo,那么您只会获得一些相当无用的时区子集。

编辑 :为了避免混淆,我使用私有Time#get_zone API的原因是因为当您调用{{{}时,这就是在幕后使用的内容1}}。如果您不需要Time#zone=,则调用tzinfo会返回Time.send(:get_zone, "US/Central")

答案 1 :(得分:0)

你是从模拟器中得到的吗? 如果是这样,如果从终端运行它,该命令会返回什么? $ systemsetup -gettimezone

Mac OS 10.5中的时区设置GUI会将时区设置为US / *。如果您从控制台手动设置它,则可以将其设置为预期时区之一。

运行此命令以获取有效的列表,并注意US / Central不在其中 $ systemsetup -listtimezones

运行此命令将其设置为America / Chicago
$ systemsetup -settimezone America / Chicago