我已经阅读了一些关于如何在iOS中的2个日期之间计算差异的线程,这里是一个似乎也由Apple文档提供的示例,我用它来决定2个日期是否相同(忽略时间) 。但是组件:方法总是返回year = 0,month = 0,day = 0,即使2个日期不同。我不知道为什么......我很感激你的想法...
+ (BOOL)isSameDate:(NSDate*)d1 as:(NSDate*)d2 {
if (d1 == d2) return true;
if (d1 == nil || d2 == nil) return false;
NSCalendar* currCal = [NSCalendar currentCalendar];
// messing with the timezone - can also be removed, no effect whatsoever:
NSTimeZone* tz = [NSTimeZone timeZoneForSecondsFromGMT:0];
[currCal setTimeZone:tz];
NSDateComponents* diffDateComps =
[currCal components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit
fromDate:d1 toDate:d2 options:0];
return ([diffDateComps year] == 0 && [diffDateComps month] == 0 && [diffDateComps day] == 0);
}
答案 0 :(得分:1)
好的,我发现了这个问题,并没有发生在每个日期,只有连续日期。事实证明'isSameDate'没有正确实现为组件:fromDate:toDate将返回0表示dec 23 8:00,dec 24 07:59即使时间组件不在组件标志中!但它会在12月23日8:00,12月24日8:01返回1。
要修复我的方法,我需要执行其他操作:
NSDateComponents* c1 =
[currCal components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit
fromDate:d1];
NSDateComponents* c2 =
[currCal components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit
fromDate:d2];
return ([c1 day] == [c2 day] && [c1 month] == [c2 month] && [c1 year] == [c2 year]);