iPhone NSTimeZone:本地时区混淆

iPhone NSTimeZone:本地时区混淆,iphone,ruby-on-rails,objective-c,nstimezone,Iphone,Ruby On Rails,Objective C,Nstimezone,据我所知,打电话 NSLog(@"Local Time Zone %@",[[NSTimeZone localTimeZone] name]); 为您提供设备的本地时区。它给我的是“US/Central”,我在[NSTimeZone abbreviationDictionary]的缩写列表中找不到,或者在[NSTimeZone knownTimeZoneNames]的时区名称列表中也找不到。这是从哪里来的?我需要将当前设备时区传递给Rails应用程序,它可以理解诸如“澳大利亚/悉尼”或“美国/

据我所知,打电话

NSLog(@"Local Time Zone %@",[[NSTimeZone localTimeZone] name]);
为您提供设备的本地时区。它给我的是“US/Central”,我在[NSTimeZone abbreviationDictionary]的缩写列表中找不到,或者在[NSTimeZone knownTimeZoneNames]的时区名称列表中也找不到。这是从哪里来的?我需要将当前设备时区传递给Rails应用程序,它可以理解诸如“澳大利亚/悉尼”或“美国/芝加哥”之类的内容,但不能理解“美国/中央”


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

您是从模拟器中获得的吗? 如果是,如果从终端运行此命令,它将返回什么?
$systemsetup-gettimezone

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

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

运行此命令将其设置为America/Chicago

$systemsetup-settimezone America/Chicago

您可能正在使用
ActiveSupport::TimeWithZone
而不需要
tzinfo
gem:

$ irb -rrubygems -ractivesupport -rtzinfo
>> Time.send(:get_zone, "US/Central").now
=> Tue, 17 Nov 2009 04:27:23 CST -06:00
如果您不需要
tzinfo
,您只会得到一部分时区,这是相当无用的


EDIT:为了避免混淆,我之所以使用私有的
Time#get_zone
API,是因为在调用
Time#zone=
时,在幕后使用的就是这个API。如果您不需要
tzinfo
,调用
Time.send(:get_zone,“US/Central”)
返回
nil

您得到的缩写是什么:[[NSTimeZone localTimeZone]缩写]?我从模拟器内以及在设备上调试时获得US/Central。当我运行$systemsetup-gettimezone时,我会得到时区:US/Central如果我在命令行中更改时区,这会影响iPhone上的时区吗?如果不是一个有效的时区,美国/中环从哪里来?谢谢,尼克。显然我只是想在错误的地方解决问题。令人惊叹的