objective-c – NSDateFormatter返回错误的date

我有这段代码:

// Convert string to date object NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"MMMM d, YYYY"]; NSDate *formatDate = [dateFormat dateFromString:self.date]; NSLog(@"1-%@", self.date); NSLog(@"2-%@", formatDate); NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:formatDate]; NSString *dateCal = [NSString stringWithFormat:@"%d/%d/%d", [components day], [components month], [components year]]; NSLog(@"3-%@", dateCal); milage.date = dateCal; 

第一个NSLog返回:

1 – 2012年3月23日

第二:

2-2011-12-25 00:00:00 +0000

第三:

3-25 /二千零十一分之十二

为什么在从string获取date并格式化date时会更改date? 我期待第三个NSLog(或dateCal)等于23/3/2012。 我住在英国,所以不和时区有关。

谢谢,

插口

需要在行中使用小写字母'y':

 [dateFormat setDateFormat:@"MMMM d, YYYY"]; 

你用过setLocale方法吗?

另外,从技术问答:

如果使用用户可见的date,则应该避免设置date格式string,因为很难预测格式string在所有可能的用户configuration中的表示方式。 相反,你应该尝试限制自己设置date和时间样式(通过 – [NSDateFormatter setDateStyle:]和 – [NSDateFormatter setTimeStyle:])。

使用[dateFormat setDateStyle:NSDateFormatterLongStyle];
而不是[dateFormat setDateFormat:@"MMMM d, YYYY"];
只要我find它,会给你理由。