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]];