Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 比较相同的NSDate会将其返回为不相等_Iphone_Ios_Objective C_Nsdate - Fatal编程技术网

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