iOS:比较两个较less或相等的NSDates
我想比较两个date,并做一些事情,当一个是比另一个更小或相等,我试图这样做:
if ([self.system.systemInbetriebnahme compare:date] == NSOrderedDescending) return nil;
但是,当他们都是平等的有没有办法比较date>=
?
谢谢
更多细节:我有一个date取自一个二维数组,我有一个date存储在核心数据(通过dateselect器),我通过一个循环来比较两个date的规则:数组中的date必须是大于或等于数据库中存储的inputdate。
最新编辑:
-
我导入一个CSV文件,parsing和格式后给我两行(一个数字值和一个date)。 在这里我对date感兴趣。
-
我将所有这些存储在一个数组中,并在检查此函数中数据的一致性之后进行保存:
for (NSArray * row in array) { // Handle import if there are at least two rows if (row.count > 1) { dispatch_sync(dispatch_get_main_queue(), ^{ // Try to import value,date formatted row double value = [row[0] doubleValue]; NSDate * date = [dateFormatter dateFromString:row[1]]; //else { // Try to import date,value row if (date && value != 0.0) { [self addReading:value forDate:date]; }
-
在这里我调用函数
addreading
来检查一些规则的错误,如果一切都是okey,那么我保存managedObject上下文。if ([installationdatum compare:date] != NSOrderedAscending) { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"installation date is bigger than data" delegate: nil cancelButtonTitle:@"OK" otherButtonTitles:nil] [alert show]; return nil; } else { //Do nothing }
-
对我来说,一个规则是获取数组中的第一行元素,并将其date与已存储在数据库中的input进行比较,该input是
self.system.systemInbetriebnahme
-
毕竟,我列出了所有在tableview中得到的数组,尽pipe价值匹配
NSOrderedSame
不会显示,当它等于self.system.systemInbetriebnahme
只需检查是不是升序。
if ([self.system.systemInbetriebnahme compare:date] != NSOrderedAscending) return nil;
简单…
if ([date1 compare:date2] == NSOrderedDescending) { NSLog(@"date1 is later than date2"); } else if ([date1 compare:date2] == NSOrderedAscending) { NSLog(@"date1 is earlier than date2"); } else { NSLog(@"dates are the same"); }
NSDate *toDay = [[NSDate alloc]init]; NSLog(@"%@",toDay); NSLog(@"%@",yourSecondDate); if ([toDay timeIntervalSinceDate:yourSecondDate] < 30.0f) { NSLog(@"Do Something"); }
那么> =就意味着他们是!<,所以你可以检查
if ([self.system.systemInbetriebnahme compare:date] != NSOrderedAscending)
您可以检查结果是否等于NSOrderedDescending
和NSOrderedSame
:
NSComparisonResult comparisonResult = [self.system.systemInbetriebnahme compare:date] if (comparisonResult == NSOrderedDescending || comparisonResult == NSOrderedSame) return nil;
或者只是不匹配剩下的一个选项:
NSComparisonResult comparisonResult = [self.system.systemInbetriebnahme compare:date] if (comparisonResult != NSOrderedAscending) return nil;
在你的情况下,我会去后面的选项,因为你只有3个选项检查一个你不想要的是最简单的。
我认为这会帮助你。 do something when one is less or equal than the other as you
看起来不同的情况下, do something when one is less or equal than the other as you
。
switch ([self.system.systemInbetriebnahme compare: date]) { case NSOrderedAscending: // system date earlier then date break; case NSOrderedSame: // Same break; case NSOrderedDescending: // system date later then date break; }
没有直接的比较像> =但是你可以这样做
NSComparisonResult compareStart = [date1 compare: selectedDate]; // date1 is 6/6/2011 00:00 NSComparisonResult compareEnd = [date2 compare: selectedDate]; // date2 is 9/6/2011 00:00 if ((compareStart == NSOrderedAscending) || (compareStart == NSOrderedSame) && (compareEnd == NSOrderedDescending)) { // date is in the right range }
或者你只是比较
if ((compareStart == NSOrderedAscending) ) { // date is in the right range }
为了com [是两个NSDate
,这个:
[[date1 earlierDate:date2] isEqualToDate: date1]
如果date1早于date2,则返回YES
。
编辑
如果你想date1> = date2(以后或等于)使用这个条件:
([[date1 laterDate:date2] isEqualToDate: date1] || [date2 isEqualToDate:date1])