7

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

4

3 回答 3

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

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

于 2010-01-01T00:13:46.523 回答
11

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

NSTimeInterval rightNow = [[NSDate date] timeIntervalSinceReferenceDate];

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

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

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

正如 Ben 所指出的,NSCalendar 的组件界面也可以用来确定小时和分钟以确定它是否在一个范围内(这似乎是一种非典型用法,因为大多数事件并非每天都同时发生.. .但是......当然......也有理由这样做!)

于 2010-01-01T08:25:48.190 回答
4

看看 -[NSCalendar 组件:fromDate:]。它可以让您将日期“分解”为各个组成部分,然后在这种情况下,您可以查看小时和分钟。

于 2010-01-01T00:56:55.157 回答