2009-12-31 8 views
7

Je suis intéressé par la création d'une méthode pour trouver si la date actuelle tombe entre certains temps un jour donné. C'est pour un programme de planification, donc je veux trouver quel événement se produit à l'heure actuelle. Chaque jour a le même ensemble de fois: 820-900, 900-940, 940-1020, etc. Puisque cela doit être fait n'importe quel jour je ne sais pas comment créer un NSDate avec un certain temps. Je pense que cela pourrait être fait avec NSTimeInterval mais je ne suis pas sûr de savoir comment l'instancier.NSDate entre deux NSDates donnés

Répondre

26

Ce n'est pas parfait, mais vous pouvez utiliser [NSDate comparer:] pour vérifier votre date contre les deux limites:

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

Ou plus brièvement:

BOOL between = NO; 

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

    between = YES; 
} 

Je suis sûr qu'il ya une meilleure façon de faire une comparaison de date complexe, mais cela devrait fonctionner.

4

Jetez un coup d'œil à - [NSCalendar components: fromDate:]. Il vous permettra de «décomposer» une date en ses différents composants, et vous pourrez, dans ce cas, regarder l'heure et la minute.

11

La méthode la plus simple consiste à utiliser -timeIntervalSinceReferenceDate pour transformer chacune de vos dates en une valeur tapée NSTimeInterval, qui n'est en réalité qu'un double. De là, déterminer si une date est entre deux dates est juste une question de comparaisons numériques simples.

Si vous devez convertir une représentation de chaîne de date en une instance NSDate pour extraire un intervalle de temps, utilisez NSDateFormatter.

Si vous devez créer une date à partir de composants de date connus, utilisez NSCalendar. (c'est-à-dire que vous connaissez l'année 2010, le mois 4 et le jour 12, vous pouvez utiliser les composants de NSCalendar pour générer une instance NSDate via la méthode -dateFromComponents:).

Comme Ben indiqué, l'interface des composants de NSCalendar peut également être utilisé pour Suss l'heure & minute pour déterminer si elle est dans une plage (qui semble être un usage atypique en ce que plus événements ne se produisent pas tous les jours en même temps ... mais ... bien sûr ... il y a des raisons de le faire aussi!)

+0

aucun exemple. :(:( – bluefloyd8