NSDate在两个给定的NSDate之间

时间:2009-12-31 23:43:19

标签: cocoa nsdate

我有兴趣创建一种方法来查找当前日期是否在任何给定日期的特定时间之间。这是一个调度程序,所以我想找到当前发生的事件。每天都有相同的时间:820-900,900-940,940-1020等。由于这必须在任何一天完成,我不知道如何在一定时间内创建NSDate。我想这可能是用NSTimeInterval完成的,但我不确定如何实例化它。

3 个答案:

答案 0 :(得分:26)

这不是完美的,但您可以使用[NSDate compare:]来检查两个边界的日期:

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;
}

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

答案 1 :(得分:11)

最简单的方法是使用-timeIntervalSinceReferenceDate将每个日期转换为NSTimeInterval类型的值,这实际上只是double

NSTimeInterval rightNow = [[NSDate date] timeIntervalSinceReferenceDate];

从那里,确定日期是否在任何给定的两个日期之间只是简单的数字比较问题。

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

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

正如Ben指出的那样,NSCalendar的组件接口也可以用来支持小时和时间。确定它是否在一个范围内的分钟(这似乎是非典型的用法,因为大多数事件不是每天都在同一时间发生......但......确定......那里是这样做的原因!)

答案 2 :(得分:4)

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