两个给定的NSDate之间的时间

7

我希望能创建一个方法来查找当前日期是否在任何给定的日期中落在特定时间段内。这是为了一个排班程序,所以我想知道当前时间正在发生什么事件。每天都有相同的一组时间:820-900、900-940、940-1020等。由于这必须在任何给定的日子里完成,我不知道如何创建具有特定时间的NSDate。我认为这可能可以通过NSTimeInterval来完成,但我不确定如何实例化它。

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

我相信有更好的方式进行复杂的日期比较,但是这个方法也应该可以工作。


11

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

NSTimeInterval rightNow = [[NSDate date] timeIntervalSinceReferenceDate];

通过简单的数值比较,可以确定一个日期是否在给定的两个日期之间。

如果需要将一个日期的字符串表示转换为NSDate实例再检索时间间隔,则使用NSDateFormatter

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

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


4

请看- [NSCalendar components:fromDate:]。它将帮助您将日期“分解”为其各个组成部分,然后您可以在此情况下查看小时和分钟。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接