iPhone NSTimeZone:localTimeZone混乱

从我的理解,呼唤

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

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

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

您可能在不需要tzinfo gem的情况下使用ActiveSupport::TimeWithZone

 $ 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的原因是因为当你调用Time#zone=时,这就是在幕后使用的。 如果您不需要tzinfo ,则调用Time.send(:get_zone, "US/Central")将返回nil

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

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

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

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