2012-10-19 55 views
0

可能重複:
NSDate/NSDateFormatter returning GMT on iPhone iOS 4.3爲什麼NSString的日期值被NSDateFormatter轉換爲GMT?

當執行

NSString *[email protected]"2012-10-19 19:37:54"; 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
NSDate *test=[formatter dateFromString:inputDateString]; 

下面的代碼 「測試」 的值是23時37分54秒二〇一二年十月十九日+0000而不是等於inputDateString的日期值。爲什麼要將日期轉換爲GMT?

編輯:如何獲取輸入字符串日期並將其轉換爲等效的NSDate對象?

+0

這有很多重複... – jrturton

+0

http://stackoverflow.com/search?q=NSDate+GMT – jrturton

回答

2

NSDate不存儲時區,也不關心它們。 NSDate只存儲自給定參考日期(2001年1月1日)以來的時間。當您像這樣使用NSDateFormatter時,它會假定日期的時區與將字符串轉換爲日期對象時用戶當前的時區相匹配,但是,當您使用NSLog檢查日期時,它沒有任何時區信息。請記住,日期仍然正確並等於輸入值。

+0

我知道NSDate是從參考日期的偏移量。你是否說「test」變量中的存儲值實際上等於inputDateString?它似乎並不是因爲當我使用測試變量進行日期計算時,它似乎包含GMT日期。如何獲取輸入日期字符串並將其轉換爲等效日期? – ChrisP

+0

@ChrisP它是相同的日期,但代表卻不同!如果你再次通過'NSDateFormatter'抽取日期,它將輸出與你放入的字符串相同的字符串。不是因爲'NSDate'知道或關心時區,而是因爲'NSDateFormatter'知道用戶時區並且處理它。但是,兩個日期都引用了完全相同的時間點。 – JustSid