NSDateFormatter dateFromString返回错误的一年

时间:2015-05-22 03:31:28

标签: ios nsdate nsdateformatter

我有以下代码段。

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

但是当我在控制台中打印timeDate时,输出是不同的。年份变为4003。

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

我在iPad 8.3(12F69)(非模拟器)上测试。系统时区是北京。 任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:4)

问题是格式化程序的locale。如果您想使用格里高利历而不考虑设备设置,通常应将区域设置设置为en_US_POSIX

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

请参阅Apple Technical Q&A #1480。这适用于RFC 3339 / ISO 8601日期,但它确实适用于您尝试使用标准日历转换日期字符串以用于内部目的的任何地方(即,与在UI中呈现给最终用户的那些日期相反) ,通常应该使用设备的语言环境。)

答案 1 :(得分:0)

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

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