2009-12-31 45 views
7

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

回答

26

这是不完美的,但你可以使用[NSDate的比较:]检查你的约会对阵双方边界:

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

我敢肯定有一个更好的方法来做复杂的日期比较,但这应该工作。

4

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

11

最简单的方法是使用-timeIntervalSinceReferenceDate将每个日期转换为NSTimeInterval类型的值,该值仅为double

NSTimeInterval rightNow = [[NSDate date] timeIntervalSinceReferenceDate]; 

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

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

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

由于本表示,NSCalendar的组件接口,也可用于苏斯出小时&分钟,以确定它是否是在一个范围内(这似乎是在事件不会每天都在发生非典型用法同时......但是......当然......也有这样的理由!)

+0

没有例子。 :(:( – bluefloyd8 2013-11-25 14:18:07