2012-05-26 33 views
0

我想下面NSString轉換爲NSDate@"2013-04-01T22:00:00Z"NSDateFormatter正在改變2小時的日期,爲什麼?

我使用下面的代碼:

NSString *dateString = @"2013-04-01T22:00:00Z"; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"]; 
NSDate *theDate = [dateFormatter dateFromString:dateString]; 

當我打印theDate我得到以下答案:2013年4月1日20:00 :00 +0000

現在我想知道爲什麼小時是20:00而不是22:00,你有什麼想法嗎?

謝謝!

+1

這必須是iOS/cocoa標籤中最常出現的重複問題之一。 http://stackoverflow.com/search?q=Nsdateformatter+wrong+hour您是否先搜索? – jrturton

+0

[NSDateFormatter給出錯誤的小時(+8小時)]的可能的重複(http://stackoverflow.com/questions/4117515/nsdateformatter-giving-the-wrong-hour-8-hours) – jrturton

+0

可能的重複[錯誤的時間從NSDateFormatter](http://stackoverflow.com/questions/5466419/wrong-time-from-nsdateformatter) –

回答

3

因爲你的dateFormat沒有指定一個時區,NSDateFormatter使用你的本地時區。你必須自己設定時區。字符串中的Z表示GMT。

[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]]; 
1

嘗試在您的代碼中的時區,我已經嘗試在您的默認TImeZone。它的工作正常。

NSString *dateString = @"2013-04-01T22:00:00Z"; 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"]; 
    [dateFormatter setTimeZone:[NSTimeZone defaultTimeZone]; 
    NSDate *theDate = [dateFormatter dateFromString:dateString]; 
+1

試過這一行也 [dateFormatter setTimeZone:[NSTimeZone localTimeZone]; –

+0

此代碼是錯誤的。不要在日期格式中引用'Z'。並且沒有理由將時區設置爲默認時區,這已經是默認時區。 – rmaddy

相關問題