2009-12-31 23 views
7

Estoy interesado en crear un método para encontrar si la fecha actual cae entre ciertas horas en un día determinado. Es para un programa de programación, así que quiero encontrar qué evento está ocurriendo en el momento actual. Todos los días tienen los mismos tiempos: 820-900, 900-940, 940-1020, etc. Como esto debe hacerse en un día determinado, no sé cómo crear un NSDate con un cierto tiempo. Creo que esto podría hacerse con NSTimeInterval, pero no estoy seguro de cómo crear una instancia de eso.NSFecha entre dos NSDates dados

Respuesta

26

Esto no es perfecta, pero se puede usar [NSDate comparar:] revisar la fecha contra los dos límites:

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

O más brevemente:

BOOL between = NO; 

if (([myDate compare:firstDate] == NSOrderedDescending) && 
    ([myDate compare:secondDate] == NSOrderedAscending)) { 

    between = YES; 
} 

Estoy seguro de que hay una mejor forma de hacer una comparación compleja de fechas, pero esto debería funcionar.

4

Eche un vistazo a - [NSCalendar components: fromDate:]. Le permitirá "descomponer" una fecha en sus diversos componentes, y luego puede, en este caso, mirar la hora y el minuto.

11

La manera más fácil de hacer esto sería usar -timeIntervalSinceReferenceDate para convertir cada una de sus fechas en un valor tipeado NSTimeInterval, que en realidad es solo double.

NSTimeInterval rightNow = [[NSDate date] timeIntervalSinceReferenceDate]; 

A partir de ahí, determinar si una fecha es de entre dos fechas dadas es sólo una cuestión de comparaciones numéricas simples.

Si necesita convertir una representación de cadena de una fecha a una instancia NSDate para recuperar un intervalo de tiempo, utilice NSDateFormatter.

Si necesita crear una fecha a partir de componentes de fecha conocidos, use NSCalendar. (es decir, usted sabe que el año es 2010, el mes es 4 y el día es 12, puede usar los componentes de NSCalendar para generar una instancia NSDate a través del método -dateFromComponents:).

Como Ben indicado, interfaz del componente de NSCalendar puede utilizarse también para suss la hora minuto & para determinar si está en un rango (que al parecer ser un uso atípico en que más eventos no ocurren todos los días al mismo tiempo ... pero ... claro ... ¡hay razones para hacerlo también!)

+0

Ningún ejemplo. :(:( – bluefloyd8