Datum vergleichen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Datum vergleichen

    Hallo zusammen,

    ich habe ein kleines Problem. Ich möchte vergleichen, ob das gespeicherte Datum (dd.MM.yyyy) größer bzw gleich dem heutigen ist.

    Mein Code sieht wie folgt aus:

    Quellcode

    1. NSDate *currDate = [NSDate date];
    2. for (int i = 0; i <counter; i++) {
    3. NSManagedObjectContext * singleToDoEntry = [results objectAtIndex:i];
    4. NSString * due =[singleToDoEntry valueForKey:@"due"];
    5. NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    6. [dateFormatter setDateFormat:@"dd.MM.yyyy"];
    7. if(due != nil){
    8. NSDate * targetDate = [dateFormatter dateFromString:due];
    9. NSLog(@"currDate: %@ - Date from Entry: %@",[dateFormatter stringFromDate:currDate],[dateFormatter stringFromDate:targetDate]);
    10. if(targetDate >= currDate){
    11. ....
    12. }
    Alles anzeigen


    Aber der Code sagt immer, dass das targetDate zu klein ist:
    LogFile:
    2012-05-18 14:53:12.968 Schedule[8777:fb03] currDate: 18.05.2012 - Date from Entry: 18.05.2012
    2012-05-18 14:53:12.970 Schedule[8777:fb03] Date too old: 18.05.2012
    2012-05-18 14:53:12.971 Schedule[8777:fb03] currDate: 18.05.2012 - Date from Entry: 13.05.2012
    2012-05-18 14:53:12.971 Schedule[8777:fb03] Date too old: 13.05.2012
    2012-05-18 14:53:12.972 Schedule[8777:fb03] currDate: 18.05.2012 - Date from Entry: 19.05.2012
    2012-05-18 14:53:12.972 Schedule[8777:fb03] Date too old: 19.05.2012
    Gruß
    Sven
  • Danke für die Antwort.

    Es klappt jetzt nahezu perfekt.

    Ein Problem habe ich noch, mit dem Code

    Quellcode

    1. if(currDate == [currDate earlierDate:targetDate]{
    2. ...
    3. }


    bekomme ich jetzt alle richtig, bloss bekomme ich die von heute nicht.

    Habe nun

    Quellcode

    1. if((currDate == [currDate earlierDate:targetDate]) || (currDate == [currDate isEqualToDate:targetDate])){
    2. ...
    3. }

    probiert, jedoch erhalte ich einen Fehler beim kompilieren.
    Gruß
    Sven
  • Vergleichen die Methoden nicht inkl. Uhrzeit? Willst Du das denn, oder willst Du vielmehr prüfen, ob es sich um den gleichen Kalendertag handelt? Das mache ich so:

    Quellcode

    1. // Mitternacht für Startdatum ermitteln
    2. NSCalendar* calendar = [NSCalendar currentCalendar];
    3. NSDateComponents* comps = [calendar components:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) fromDate:startDatum];
    4. NSDate* theMidnightHour = [calendar dateFromComponents:comps];
    5. // Am selben Kalendertag?
    6. NSTimeInterval interval = [endeDatum timeIntervalSinceDate:theMidnightHour];
    7. if (aktuelleMessungCache.datum && interval >= 0 && interval < 60*60*24) {
    8. [...]
    9. }
  • Da hat Dir der bug ja schon einen Lösungsansatz präsentiert. Mit den ersten drei Zeilen von seinem Code bekommst du das aktuelle Datum mit der Uhrzeit 00:00:00. Wenn Du das als currDate nimmst hast Du eigentlich schon das, was Du brauchst:

    Quellcode

    1. if (targetDate == [targetDate laterDate:currDate])
    2. {
    3. // targetDate ist heute oder später
    4. }
    5. else
    6. {
    7. // targetDate ist vor heute
    8. }

    Michael

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Michael ()