2009-12-30 80 views
1

我只是想澄清,如果我瞭解日期&時區的工作方式。在Cocoa處理時區

基本上,我有一個日期字符串@「2008-07-06 12:08:49」,我想轉換爲一個NSDate。我希望此日期和時間位於當前用戶的時區設置中。因此,如果它們處於GMT或HST狀態,它仍然是12:08:49。

如果我在UNIX形式1215382129(UTC)和我的時區日期設置爲倫敦(GMT),從的NSLog()輸出的日期是:

2008-07-06 12點08分49秒+0100

如果我再更改時區夏威夷(HST)和輸出在同一天,我得到:

2008-07-06 12點08分49秒-1000

這似乎工作得很好,但我在印象中得到夏威夷時間,我不得不在物理上添加時差(-10h rs)到unix時間戳。那麼這不是必需的嗎?

這是否意味着,無論unix時間指向的日期和時間,它總是指向用戶所在的任何時區的相同日期和時間?

希望這是有道理的!

編輯

我剛剛意識到(感謝凱文·康納!)其實NSDateFormatter是創造依賴於當前時區該日期字符串不同的UNIX時間戳!所以我完全錯了! :-)

回答

5

免責聲明,我主要是一個Java的傢伙。但可可似乎在這方面像Java庫一樣工作:日期是無區間時間戳。時區位於的域中,格式爲日期以供顯示。換句話說,內部格式不考慮時區,全部採用UTC。時區對人類來說相對便利,因此它們處於顯示/解析方面。

我注意到NSDateFormatter上有一個setTimeZone: method。在執行格式之前,嘗試在格式化程序中調用它。

+0

啊,有趣!我沒有意識到'NSDateFormatter'使用時區。這似乎是它自動從系統默認設置它。它根據區域創建不同的unix時間戳!感謝你! – 2009-12-30 16:37:57

+0

我還沒有確認這一點,但我認爲你會發現日期解析也是如此:當你解析一個日期字符串時,它會假定該字符串在你的系統時區,除非你以不同的方式配置解析器。乾杯:) – 2009-12-30 17:25:55