【问题标题】:NSDate between two given NSDates两个给定 NSDate 之间的 NSDate
【发布时间】:2010-12-31 13:04:48
【问题描述】:

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

【问题讨论】:

    标签: cocoa nsdate


    【解决方案1】:

    这并不完美,但您可以使用 [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;
    }
    

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        NSTimeInterval rightNow = [[NSDate date] timeIntervalSinceReferenceDate];
        

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

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

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

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

        【讨论】:

          猜你喜欢
          • 2011-11-01
          • 2013-12-29
          • 2011-07-30
          • 2012-05-30
          • 2012-10-25
          • 2014-09-03
          • 2011-06-11
          • 1970-01-01
          • 2011-06-25
          相关资源
          最近更新 更多