2009-11-15 53 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