2016-08-05 13 views
0
NSDate *currentTime = [NSDate date]; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
         [dateFormatter setDateFormat:@"hh:mm"]; 
NSString *resultString = [dateFormatter stringFromDate: currentTime]; 
NSDate* firstDate = [dateFormatter dateFromString:resultString]; 
NSDate* secondDate = [dateFormatter dateFromString:@"16:00"]; 
NSTimeInterval timeDifference = [secondDate timeIntervalSinceDate:firstDate]; 

if (timeDifference < 0){ 

Ich versuche die aktuelle Zeit abzurufen und sie mit einer Eingabezeit zu vergleichen. Dies ist Teil meines Codes ab sofort (Ziel c für iOS), aber NSTimeInterval verursacht einen Haltepunkt. Als Ergänzung dazu möchte ich auch das Datum in den Vergleich einbeziehen, wenn also am Dienstag nach 17:00 Uhr ein Event stattfinden würde. Also, wenn Sie irgendwelche Ideen haben, wie man das auch einbaut, würde es sehr geschätzt werden!Aktuelles Datum und Uhrzeit vergleichen iOS

+0

Johns Antwort unten ist die grundlegende Form für den Vergleich der Daten. (Und beachten Sie, dass es nicht notwendig ist, vor dem Vergleich in eine Zeichenfolge und wieder zurück zu konvertieren.) Diese Zeile über "nach 5 Uhr am Dienstag" ist ein wenig hinterhältig und könnte eine separate Frage rechtfertigen - müssen Verhalten diff Zeitzonen angeben, ob es ist "any" Dienstag, usw. –

Antwort

2

zwei Termine Zum Vergleich:

if ([firstDate compare:secondDate] == NSOrderedDescending) { 
    NSLog(@"firstDate is later than secondDate"); 
    NSTimeInterval timeDifference = [firstDate timeIntervalSinceDate:secondDate]; 
} else if ([firstDate compare:secondDate] == NSOrderedAscending) { 
    NSLog(@"firstDate is earlier than secondDate"); 
    NSTimeInterval timeDifference = [secondDate timeIntervalSinceDate:firstDate]; 
} else { 
    NSLog(@"firstDate and secondDate are the same"); 
} 

Diese Probleme lösen sollte.

+0

Was ist, wenn ich möchte, dass es nur für einen bestimmten Tag ist? Sagen Sie, wenn es 5:00 am Dienstag ein Ereignis würde auftreten, aber Mittwoch um 5:00 würde es nicht. – DSmith

+2

@DSmith: Ein "Datum", wie es von einem NSDate-Objekt wie diesem verkörpert wird, stellt einen spezifischen Einzelpunkt in der realen Welt in einem absoluten globalen Sinn dar. Dieser Zeitpunkt kann als Datum und Uhrzeit für eine bestimmte Zeitzone oder im Vergleich zu anderen bestimmten Zeitpunkten gerendert werden. Es gibt keine allgemeine "Tageszeit" oder irgendein anderes allgemeines Konzept an. Wenn Sie herausfinden möchten, wie Sie das darstellen sollen, was Sie suchen, können Sie diese Frage gezielter stellen, um sie am besten zu modellieren. –

0
NSDate *currentTime = [NSDate date]; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
         [dateFormatter setDateFormat:@"hh:mm"]; 
NSString *resultString = [dateFormatter stringFromDate: currentTime]; 
NSDate* firstDate = [dateFormatter dateFromString:resultString]; 
NSDate* secondDate = [dateFormatter dateFromString:@"16:00"]; 
NSComparisonResult result = [secondDate compare:firstDate]; 
     switch(result){ 
      case NSOrderedDescending: 
       NSLog(@"date1 is later than date2"); 
       break; 
      case NSOrderedAscending: 
       NSLog(@"date1 is earlier than date2"); 
       break; 
      default: 
       NSLog(@"dates are the same"); 
       break; 
     }