2009-12-31 12 views
7

Ich bin daran interessiert, eine Methode zu erstellen, um herauszufinden, ob das aktuelle Datum zwischen bestimmten Zeiten an einem bestimmten Tag liegt. Es ist für ein Zeitplanungsprogramm, also möchte ich herausfinden, welches Ereignis zur aktuellen Zeit auftritt. Jeder Tag hat die gleichen Zeiten: 820-900, 900-940, 940-1020 usw. Da dies an jedem beliebigen Tag gemacht werden muss, weiß ich nicht, wie man ein NSDate mit einer bestimmten Zeit erstellt. Ich denke, dass dies mit NSTimeInterval getan werden könnte, aber ich bin mir nicht sicher, wie man das instanziiert.NSDate zwischen zwei angegebenen NSDates

Antwort

26

Dies ist nicht perfekt, aber man konnte mit [NSDate vergleichen:] Ihr Datum gegen beide Grenzen zu überprüfen:

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

Oder kürzer:

BOOL between = NO; 

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

    between = YES; 
} 

Ich bin sicher, dass es eine bessere Möglichkeit, einen komplexen Datumsvergleich durchzuführen, aber das sollte funktionieren.

4

Werfen Sie einen Blick auf - [NSCalendar Komponenten: fromDate:]. Sie können ein Datum in seine verschiedenen Komponenten "zerlegen", und dann können Sie in diesem Fall die Stunde und Minute betrachten.

11

Der einfachste Weg, dies zu tun wäre, -timeIntervalSinceReferenceDate zu verwenden, um jedes Ihrer Daten in einen NSTimeInterval typed Wert zu verwandeln, der wirklich nur ein double ist.

Von dort aus festzustellen, ob ein Datum zwischen zwei beliebigen Daten liegt, ist nur eine Frage einfacher numerischer Vergleiche.

Wenn Sie aus einer Zeichenfolgendarstellung eines Datums in eine NSDate-Instanz konvertieren müssen, um anschließend ein Zeitintervall abzurufen, verwenden Sie NSDateFormatter.

Wenn Sie ein Datum aus bekannten Datumskomponenten erstellen müssen, verwenden Sie NSCalendar. (Wenn Sie wissen, dass das Jahr 2010 ist, der Monat 4 und der Tag 12 ist, können Sie mithilfe der NSCalendar-Komponenten eine NSDate-Instanz über die Methode -dateFromComponents: generieren.).

Wie Ben angegeben, kann NSCalendar der Komponentenschnittstelle auch die Stunde & Minute abtasten verwendet werden, um festzustellen, ob sie in einem Bereich liegt (was scheinbar eine atypische Nutzung dass meist Ereignisse würde nicht jeden Tag passieren zur gleichen Zeit ... aber ... sicher ... es gibt auch Gründe, dies zu tun!)

+0

kein Beispiel. :(:( – bluefloyd8

Verwandte Themen