我運行下面的代碼: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問題?
我運行下面的代碼: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問題?
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];
......實際上這是美國(所以可能不是中央)。
更具體的時區的幫助可以在這裏找到...
但是,如果你想顯示的到期時間,你會不會仍然希望它在用戶的currentLocale?
即時消息在中央時區,我需要強制NSDate留在中心原因,我必須計算到期日期,它將基於達拉斯,無論用戶在哪裏。我怎麼做? –
我已經編輯了我的答案,以幫助。 – Snips
這裏只是胡亂猜測,但也許它是與時區?
試試你的NSDate的時區[NSTimeZone localTimeZone]
如果你查看輸出,你會看到該日誌包括時區:
2011-09-16 16:14:16.434 iSavemore[1229:7907] now: 2011-09-16 21:14:16 +0000
^^^^^^
日誌的時間戳是本地時間。我假設你在UTC時間前5小時的時區。
甲的NSDate指的是在特定的時間點。無論你想要如何顯示,這取決於你。通常使用NSDateFormatter。
這就是爲什麼你會看到很多的建議,對存儲的時間或日期作爲比一個NSDate以外的任何其他原因。如果嘗試將其存儲爲字符串,那麼當您嘗試在不同時區處理顯示時,您將遇到許多麻煩。
這是在設備上還是在模擬器中? – DarkDust