2011-09-16 35 views
3

我運行下面的代碼:NSDate是5個小時了

NSDate * now = [NSDate date];

NSLog(@"now: %@", now); 

,並得到:

2011-09-16 16:14:16.434 iSavemore [1229:7907現在:2011-09-16 21點14分16秒+0000

正如你可以看到我在16:14:16(4:14 pm)運行這個,但NSDate正在返回21:16:16(9:14 pm!)。這是Xcode4問題還是NSDate問題?

+0

這是在設備上還是在模擬器中? – DarkDust

回答

9

NSDate的默認設置爲一個是適合您的需要,例如通用時區(也稱爲GMT)。

我猜你的地方在東海岸,背後UTC 5小時。

嘗試添加該你的日期格式...

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 

[dateFormatter setLocale:[NSLocale currentLocale]]; 

...你應該看到您的本地時間。

如果你想使用指定的語言環境,而不是「currentLocale」,對相關區域創建NSLocale。

NSLocale *usLoc = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 

[dateFormatter setLocale:usLoc]; 

......實際上這是美國(所以可能不是中央)。

更具體的時區的幫助可以在這裏找到...

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html

但是,如果你想顯示的到期時間,你會不會仍然希望它在用戶的currentLocale?

+0

即時消息在中央時區,我需要強制NSDate留在中心原因,我必須計算到期日期,它將基於達拉斯,無論用戶在哪裏。我怎麼做? –

+0

我已經編輯了我的答案,以幫助。 – Snips

-1

這裏只是胡亂猜測,但也許它是與時區?

0

試試你的NSDate的時區[NSTimeZone localTimeZone]

5

如果你查看輸出,你會看到該日誌包括時區:

2011-09-16 16:14:16.434 iSavemore[1229:7907] now: 2011-09-16 21:14:16 +0000 
                     ^^^^^^ 

日誌的時間戳是本地時間。我假設你在UTC時間前5小時的時區。

的NSDate指的是在特定的時間點。無論你想要如何顯示,這取決於你。通常使用NSDateFormatter。

這就是爲什麼你會看到很多的建議,對存儲的時間或日期作爲比一個NSDate以外的任何其他原因。如果嘗試將其存儲爲字符串,那麼當您嘗試在不同時區處理顯示時,您將遇到許多麻煩。