Iphone 比较相同的NSDate会将其返回为不相等
我取一个日期,并为它创建一个新指针,然后将它与另一个值相等的日期进行比较。它将此日期报告为同一日期,但声称它们不匹配:Iphone 比较相同的NSDate会将其返回为不相等,iphone,ios,objective-c,nsdate,Iphone,Ios,Objective C,Nsdate,我取一个日期,并为它创建一个新指针,然后将它与另一个值相等的日期进行比较。它将此日期报告为同一日期,但声称它们不匹配: NSDate *date2 = [[NSDate alloc] initWithTimeIntervalSince1970:[date1 timeIntervalSince1970]]; NSLog(@"date 2: %@", date2); NSLog(@"date 3: %@", date3); NSLog(@"equal: %i", [date2 isEqualToDa
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
知道为什么这两个值不相等吗?试试这个
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;
}
请检查以下内容:
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:将检查完全相同的日期(亚秒差异也将导致条件失败)
根据:
isEqualToDate:
返回一个布尔值,该值指示给定对象是否为
NSDate对象,与接收器完全相等。
-(BOOL)isEqualToDate:(NSDate*)另一个日期
参数
另一个日期
The date to compare with the receiver.
返回值
The date to compare with the receiver.
如果另一个日期是NSDate对象,并且正好等于
接收者,否则不行
讨论
此方法检测日期之间的秒级差异。如果你愿意
要比较粒度较小的日期,请使用
timeIntervalSinceDate:比较两个日期
它与微秒进行比较,因此它给出的值类似于0。
timeintervalncedate:
此方法用于在微秒、秒等范围内的日期。date2
和date3
以毫秒为单位关闭
要使用第二精度进行比较,请执行以下操作:
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *comps = [calendar components:NSSecondCalendarUnit fromDate:date2 toDate:date3 options:0];
if (comps.second == 0) {
//do something
}
您可以使用[date3 compare:date2]==NSOrderedSamehow date3获取值来检查这两个NSDate?您的精度可能不够。检查[date2 timeIntervalSince1970]==[date3 timeIntervalSince1970]这个答案解释了我使用了相同的代码,并且得到了相等值:1