NSDateFormatter从string返回不正确的date

我有一个方法,

+ (NSDate *) convertToDateFrom:(NSString *) dateString { if (dateString == nil || [dateString isEqual:@""]) return nil; //return nil if dateString is empty NSDateFormatter *df = [[NSDateFormatter alloc] init]; [df setDateFormat:@"EEEE, dd MMMM yyyy HH:mm"]; NSDate *date = [df dateFromString:dateString]; return date; } 

当我通过时,

 @"Monday, 21 November 2011 17:01" //Passed string 

它返回一个错误的date,

 2011-11-21 23:14:00 +0000 // Output 

我不知道我是否正确使用这些标志或NSDateFormatter不正确地将我的string转换为date。

难道我做错了什么?

谢谢

date结尾的+0000表示GMT。 所有date都相对于GMT存储; 当使用date格式化程序将date转换为string或反之亦然时,包括您的时区的偏移量。 您可以使用NSDateFormatter的-setTimeZone:方法来设置使用的时区。

简而言之,你在代码中没有任何错误。 使用[df stringFromDate:date]; 看到date是正确的。 (你也可以使用NSDate的-descriptionWithCalendarFormat:timeZone:locale:

尝试使用

 df stringFromDate:date 

以下在我的工作,

 NSLog(@"Date for locale %@: %@", [[dateFormatter locale] localeIdentifier], [df stringFromDate:date]); 

给我输出为:

 Date for locale en_US: Wednesday, 26 June 2013 15:50 

尝试设置时区和区域设置。

 [df setLocale:[NSLocale currentLocale]]; [df setTimeZone:[NSTimeZone systemTimeZone]];