也許你正在混淆視聽的時間的時間點(即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」)。
所以我不知道爲什麼我的電腦上的日期打印格林尼治標準時間。它可能在您計算機的另一個時區。
但仍然只是表示,日期仍然相同。
也許是夏令時問題? – 2011-02-12 05:40:43
嘗試重置時區,`[NSTimeZone resetSystemTimeZone]`。我想,重置時區可能會更新到當前時間。 – Mahesh 2011-02-12 05:47:31