我拿一个日期并为它做一个新指针,然后将它与另一个具有相同价值的日期进行比较。它将此报告为同一日期,但声称它们不匹配:
NSDate *date2 = [[NSDate alloc] initWithTimeIntervalSince1970:[date1 timeIntervalSince1970]];
NSLog(@"date 2: %@", date2);
NSLog(@"date 3: %@", date3);
NSLog(@"equal: %i", [date2 isEqualToDate:date3]);
这是NSLog:
date 2: 2013-03-15 11:12:24 +0000
date 3: 2013-03-15 11:12:24 +0000
equal: 0
知道为什么这些没有平等回归?
答案 0 :(得分:2)
试试这个..
NSComparisonResult result = [date1 compare:date2]; // comparing two dates
switch (result) {
case NSOrderedAscending:
InfoLog(@"date1 is less");
break;
case NSOrderedDescending:
InfoLog(@"date1 is greater");
break;
case NSOrderedSame:
InfoLog(@"same date");
break;
default:
break;
}
答案 1 :(得分:1)
请检查:
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) fromDate:date2];
NSDate *date2New = [calendar dateFromComponents:components];
components = [calendar components:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) fromDate:date3];
NSDate *date3New = [calendar dateFromComponents:components];
if([date2New isEqualToDate:date3New])
{
//do stuffs
}
我认为代码中的问题是isEqualToDate:将检查完全相同的日期(亚秒差异也会导致条件失败)
根据NSDate:
<强> isEqualToDate:强>
返回一个布尔值,指示给定对象是否为 NSDate对象与接收器完全相同。
- (BOOL)isEqualToDate:(NSDate *)anotherDate
的参数强> 的
<强> anotherDate 强>
The date to compare with the receiver.
返回值
如果anotherDate是NSDate对象并且完全等于 接收者,否则没有。
的讨论强> 的
此方法检测日期之间的亚秒差异。如果你想 要比较不太精细的日期,请使用 timeIntervalSinceDate:比较两个日期。
答案 2 :(得分:0)
它还与微秒进行比较,因此它给出的值为0。
timeIntervalSinceDate:
此方法用于日期范围为微秒,秒等。
答案 3 :(得分:0)
date2
和date3
关闭毫秒。
比较然后使用第二个精度执行此操作:
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *comps = [calendar components:NSSecondCalendarUnit fromDate:date2 toDate:date3 options:0];
if (comps.second == 0) {
//do something
}