Cocoa 两个给定NSDate之间的NSDate

Cocoa 两个给定NSDate之间的NSDate,cocoa,nsdate,Cocoa,Nsdate,我对创建一个方法感兴趣,该方法可以发现当前日期是否介于给定日期的特定时间之间。这是一个调度程序,所以我想找出当前发生的事件。每天都有相同的时间集:820-900、900-940、940-1020等。由于这必须在任何给定的一天完成,我不知道如何创建具有特定时间的NSDate。我认为这可以通过NSTimeInterval实现,但我不确定如何实例化它。这并不完美,但您可以使用[NSDate COMPAR:]根据两个边界检查日期: NSDate *firstDate = ... NSDate *seco

我对创建一个方法感兴趣,该方法可以发现当前日期是否介于给定日期的特定时间之间。这是一个调度程序,所以我想找出当前发生的事件。每天都有相同的时间集:820-900、900-940、940-1020等。由于这必须在任何给定的一天完成,我不知道如何创建具有特定时间的NSDate。我认为这可以通过NSTimeInterval实现,但我不确定如何实例化它。

这并不完美,但您可以使用[NSDate COMPAR:]根据两个边界检查日期:

NSDate *firstDate = ...
NSDate *secondDate = ...

NSDate *myDate = [NSDate date];

switch ([myDate compare:firstDate]) {
    case NSOrderedAscending:
        NSLog(@"myDate is older");
        // do something
        break;
    case NSOrderedSame:
        NSLog(@"myDate is the same as firstDate");
        // do something
        break;
    case NSOrderedDescending:
        NSLog(@"myDate is more recent");
        // do something
        break;
}

switch ([myDate compare:secondDate]) {
    case NSOrderedAscending:
        NSLog(@"myDate is older");
        // do something
        break;
    case NSOrderedSame:
        NSLog(@"myDate is the same as secondDate");
        // do something
        break;
    case NSOrderedDescending:
        NSLog(@"myDate is more recent");
        // do something
        break;
}
或者更简单地说:

BOOL between = NO;

if (([myDate compare:firstDate] == NSOrderedDescending) &&
    ([myDate compare:secondDate] == NSOrderedAscending)) {

    between = YES;
}

我确信有更好的方法来进行复杂的日期比较,但这应该是可行的。

看看-[NSCalendar组件:fromDate:]。它可以让你把一个日期“分解”成它的各个组成部分,然后在这个例子中,你可以查看小时和分钟。

最简单的方法是使用
-timeintervalscenereferencedate
将你的每个日期转换成
NSTimeInterval
类型化的值,这实际上只是一个
双精度

NSTimeInterval rightNow = [[NSDate date] timeIntervalSinceReferenceDate];
从这里开始,确定一个日期是否在任何给定的两个日期之间只是一个简单的数字比较问题

如果需要将日期的字符串表示形式转换为NSDate实例,然后检索时间间隔,请使用

如果需要从已知的日期组件创建日期,请使用。(即,您知道年份是2010年,月份是4,日期是12,您可以使用NSCalendar的组件通过
-dateFromComponents:
方法生成NSDate实例。)

正如Ben所指出的,NSCalendar的组件接口还可以用来计算小时和分钟,以确定它是否在某个范围内(这似乎是一种非典型用法,因为大多数事件不会每天同时发生……但是……当然……也有理由这么做!)