2009-11-15 107 views
2

从我的理解,呼吁iPhone NSTimeZone:localTimeZone混乱

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

为您提供设备的本地时区。那是什么让我为“美/中环”,我无法找到[NSTimeZone abbreviationDictionary]在缩写列表中任何地方,或时区名称在[NSTimeZone knownTimeZoneNames]列表。这个从哪里来?我需要将当前设备时区传递到Rails应用,并且它理解“Australia/Sydney”“America/Chicago”,但不是“US/Central”

如何采取什么localTimeZone是给我,并将其转换为一个字符串,Rails可以理解(即knownTimeZoneNames任何时区,这是应该是系统知道所有时区的名字吗?)

+0

你会得到什么缩写:[[NSTimeZone localTimeZone]的缩写]? – stefanB 2009-11-15 14:17:37

回答

5

,而不必要求tzinfo宝石:

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

如果你不需要tzinfo,你只会得到一个相当无用的时区的子集。

编辑:只是为了避免混淆,我使用的私有API Time#get_zone的原因是因为那是什么正在使用的幕后当你调用Time#zone=。如果您不需要tzinfo,则致电Time.send(:get_zone, "US/Central")返回nil

+0

谢谢,尼克。显然,我只是试图在错误的地方解决问题。真棒。 – Richard 2009-11-18 07:43:45

0

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

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

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

运行此将其设置为美国/芝加哥你很可能会使用ActiveSupport::TimeWithZone
$ systemsetup -settimezone美国/芝加哥

+0

我从模拟器中获取US/Central并在设备上进行调试。 当我运行$ systemsetup -gettimezone时,我得到时区:美国/中央 如果我在命令行更改时区,是否会影响iPhone上的时区?美国/中央从哪里来,如果它不是一个有效的时区? – Richard 2009-11-16 09:30:20