我想比较两个日期,当一个日期少于或等于另一个时,我会尝试这样做:
if ([self.system.systemInbetriebnahme compare:date] == NSOrderedDescending)
return nil;
但是这样可以消除它们相同的情况,是否可以将日期与>=
进行比较?
谢谢
更多细节:我有一个双维数组的日期,我有一个日期存储在核心数据(通过日期选择器),我通过循环来比较两个日期规则:数组中的日期必须大于或等于存储在数据库中的输入日期。
最新修改:
我导入了一个csv文件,在解析和格式化之后给我两行(一行用于数字值,一行用于日期)。在这里,我对约会很感兴趣。
我将所有这些存储在数组中并在检查此函数中数据的一致性后保存:
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 Context。
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
}
对我来说,一条规则就是获取数组中的第一行元素,并将其日期与已存储在数据库中的输入进行比较,即self.system.systemInbetriebnahme
在所有这些之后,我在tableview中列出了所有结果数组,但是当它等于NSOrderedSame
self.system.systemInbetriebnahme
答案 0 :(得分:12)
...简单
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");
}
答案 1 :(得分:11)
只需检查不升序。
if ([self.system.systemInbetriebnahme compare:date] != NSOrderedAscending)
return nil;
答案 2 :(得分:3)
NSDate *toDay = [[NSDate alloc]init];
NSLog(@"%@",toDay);
NSLog(@"%@",yourSecondDate);
if ([toDay timeIntervalSinceDate:yourSecondDate] < 30.0f)
{
NSLog(@"Do Something");
}
答案 3 :(得分:1)
嗯&gt; =只是意味着它们是!&lt;,所以你可以检查
if ([self.system.systemInbetriebnahme compare:date] != NSOrderedAscending)
答案 4 :(得分:1)
您可以检查结果是否等同于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个选项可以检查你不想要的最简单的选项。
答案 5 :(得分:0)
我认为这会对你有所帮助。 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;
}
答案 6 :(得分:0)
没有像&gt; =这样的直接比较,但你可以像这样做
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
}
答案 7 :(得分:0)
要com [是两个NSDate
,这个:
[[date1 earlierDate:date2] isEqualToDate: date1]
如果date1早于date2,则返回YES
。
修改强>
如果你想要date1&gt; = date2(更晚或等于),请使用以下条件:
([[date1 laterDate:date2] isEqualToDate: date1] || [date2 isEqualToDate:date1])