NSDateFormatter dateFromString return 年份错误

NSDateFormatter dateFromString return wrong year

我有以下代码片段。

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat : @"yyyy/MM/dd"];
NSString *timeStr = @"2015/05/16";
NSDate *timeDate = [formatter dateFromString:timeStr];

但是当我在控制台打印 timeDate 时,输出是 werid.The 年变成 4003。

4003-05-16 16:00:00 +0000

我在iPad8.3(12F69)(不是模拟器)测试,系统时区是北京。 感谢任何帮助。

问题出在格式化程序 locale 上。如果无论设备设置如何都希望使用公历,通常应将区域设置设置为 en_US_POSIX

formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];

见苹果 Technical Q&A #1480。这适用于 RFC 3339/ISO 8601 日期,但它确实适用于您尝试使用标准日历转换日期字符串用于内部目的的任何地方(即与 [=18 中呈现给最终用户的那些日期相对) =],通常应该使用设备的区域设置)。

试试这个...只需要在打印输出时添加最后一行。

NSString *timeStr = @"2015/05/16";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd";
NSDate *Date = [formatter dateFromString:timeStr];
NSLog(@"Date =%@", [formatter stringFromDate:Date]);