2011-02-12 51 views
0

我使用[NSDate date]獲取當前日期/時間。返回的值是未來一小時。我檢查了我的手機位置&時間設置,它們是正確的。將在未來一小時返回日期

我可以使用下面的代碼作爲字符串顯示正確的日期和時間。

[NSDateFormatter localizedStringFromDate:[NSDate date] dateStyle:NSDateFormatterShortStyle 
                 timeStyle:NSDateFormatterShortStyle] 

但我需要它返回正確的日期/時間日期對象,因爲我用它來計算預計到達時間 -

[date dateByAddingTimeInterval:interval] 

我意識到我的問題是,類似這樣的一個已經問過,但沒有一個答案符合我的需求。提前致謝!

init] returning date an hour in the past?

+1

也許是夏令時問題? – 2011-02-12 05:40:43

+0

嘗試重置時區,`[NSTimeZone resetSystemTimeZone]`。我想,重置時區可能會更新到當前時間。 – Mahesh 2011-02-12 05:47:31

回答

15

也許你正在混淆視聽的時間的時間點(即NSDate的對象)和點你的位置(即您的本地時間)。

如果打印NSDate(如調用[date description]NSLog(@"%@", [NSDate date]);),則打印的日期表示形式爲UTC時區(+0000)(至少在我的計算機上)。
所以只要你不住在使用UTC日期打印日期的地區;總是「錯誤」。但錯誤只意味着它的表示與你辦公室裏的時鐘不一樣。日期(如時間點)仍然正確。

當您使用localizedStringFromDate:dateStyle:timeStyle:時,您將在當地時區打印日期。

NSDate *date = [NSDate date]; 
NSLog(@"%@", date); 
NSLog(@"%@", [NSDateFormatter localizedStringFromDate:date dateStyle:NSDateFormatterShortStyle timeStyle:NSDateFormatterShortStyle]); 

在我的計算機,這導致:

2011-02-12 08:32:10.658 x[75647:207] Date: 2011-02-12 07:32:10 +0000 
2011-02-12 08:32:10.661 x[75647:207] Date: Saturday, February 12, 2011 8:32:10 AM Central European Time 

印刷字符串是不同的,但的NSDate對象仍然是相同的。這就是爲什麼在向用戶顯示日期時必須使用NSDateFormatters。因爲相同的時間點在世界的不同地方看起來不同。


但只有三個地方的UTC格式的日期將是在未來的一小時,所以如果你不居住在格陵蘭島,佛得角或亞速爾羣島我可能是完全錯誤的和有你的NSDate對象有問題。


編輯:出於好奇,我再次閱讀關於[日期描述]的文檔。它說

在國際格式 YYYY-MM-DD HH的 接收器的字符串表示:MM:SS±HHMM,其中±HHMM 代表的時區從GMT 小時和分鐘偏移(例如對於 ,「2001-03-24 10:45:32 +0600」)。

所以我不知道爲什麼我的電腦上的日期打印格林尼治標準時間。它可能在您計算機的另一個時區。
但仍然只是表示,日期仍然相同。

相關問題