2015-09-03 27 views
0

有人能解释为什么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年影响这个不知何故?

感谢

+0

查看DateHelper类,你在这里实现的,必须有一些棘手的变化 – bhanu

+0

DateHelper工作正常。只使用NSDateFormatter的代码会产生相同的结果。 – Pavel

+0

当你传递“[DateHelper dateWithYear:0 month:3 day:31]”时,请NSLog检查它返回的是什么。不要执行“dateStr1” – bhanu

回答

2

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

此外,如果你想使用BC日期,你应该检查苹果的guideline欲了解更多信息。

+0

听起来对我很好。 – trojanfoe

相关问题