在網上看到一篇介紹NSDate的博文。在它的“NSDate初始化“章節,說在使用 NSLog(@"目前時間 date = %@",[NSDate date]);時,顯示出來的時間不是自己時區的時間,比我們小8個小時。因此判斷該問題是時區問題。
好,我承認作者判斷的很對,但是他給出的解決方案,卻令人很意外。這個點對於理解[NSDate date]有很大的誤導和迷惑性。
他的部分代碼如下:
因為我們在正8區,而使用NSLog顯示[NSDatedate]時,顯示的時間是GTM時區的時間。
作者將[NSDate date]的結果加上8×60×60,得到的時間就是我們正8區看到的時間。
好吧,不得不說這個方法得到的結果是符合要求的,顯示時間數字是一致的了。
下面說這個方法的不當之處。它給人一種誤導,[NSDate date]得到的時間是應該加8小時,才能正確顯示符合我們時區的時間。
何必呢?不就是要[NSDate date]符合本時區的時間數字顯示出來嗎?何必認為修改時間數值呢?
NSDate對象的顯示結果不符合,卻去修改對象本身,真真是捨本逐末。
剛好在stackoverflow.com上找到一帖,可以用來解釋這個問題。呵呵。
http://stackoverflow.com/questions/4547379/nsdate-is-not-returning-my-local-time-zone-default-time-zone-of-device
My local and default time zone is GMT +5 but when I get date and time byNSDate it return me GMT date and time.
For example the code and output from my code while testing on device isas, [device time zone Islamabad GMT +5]
Why is NSDate not giving local current time? Please help...
這是一個巴基斯坦人的提問,他不明白為什麼會這樣?您明白了嗎?你知道了怎麼來正確地顯示時間數字了嗎?