NSDateFormatter用于不同日期的相同字符串

时间:2015-09-03 11:55:11

标签: ios macos datepicker nsdateformatter

有人可以解释为什么NSDateFormatter从不同的日期返回相同的字符串:

    NSDateFormatter *f = [NSDateFormatter new];

f.dateFormat = @"MM/dd/yyyy";

NSDate *dateYear0 = [[NSCalendar currentCalendar] dateWithEra:0 year:0 month:3 day:31 hour:0 minute:0 second:0 nanosecond:0];
NSDate *dateYear1 = [[NSCalendar currentCalendar] dateWithEra:0 year:1 month:3 day:31 hour:0 minute:0 second:0 nanosecond:0];

NSString *dateStrYear0 = [f stringFromDate:dateYear0];
NSString *dateStrYear1 = [f stringFromDate:dateYear1];

NSLog(@"dateYear0=%@ \t\t dateStrYear0=%@",dateYear0,dateStrYear0);
NSLog(@"dateYear1=%@ \t\t dateStrYear1=%@",dateYear1,dateStrYear1);

dateStr1和dateStr2都具有相同的值:

NSLog结果:

dateYear0=0001-03-30 21:57:56 +0000     dateStrYear0=03/31/0001
dateYear1=0000-03-30 21:57:56 +0000     dateStrYear1=03/31/0001

它看起来像0年影响这个?

由于

1 个答案:

答案 0 :(得分:2)

那是因为Gregorian Calendar中不存在第0年。在处理AD日期时,NSDate的最小可能值为“0001-01-01 00:00:00 +0000”,因此每当使用的值低于1时,它使用“0001”作为年份。您可以检查最小值{使用NSDate类方法的{1}}值。

此外,如果您想使用BC日期,请查看Apple的guideline以获取更多信息。