Frage

Wie kann ich überprüfen, ob ein bestimmtes Datum vorhanden ist? Zum Beispiel, wenn ich Folgendes mache:

 NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
[dateComponents setYear:2011];
[dateComponents setMonth:2];
[dateComponents setDay:29];

NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:dateComponents];
[dateComponents release];

NSLog(@"date: %@", date);

Ich werde gerade den 1. März bekommen. Ich kann keine Funktion finden, die dies zulässt. Der einzige Weg, den ich es kann, besteht darin, nach dem Erstellen des NSDate zu überprüfen, ob die Komponenten mit dem übereinstimmen, was ich bestellt habe

War es hilfreich?

Lösung

Sie könnten die verwenden -[NSDateFormatter dateFromString:] Methode:

+ (BOOL)dateExistsYear:(int)year month:(int)month day:(int)day
{
    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
    dateFormatter.dateFormat = @"yyyyMMdd";

    NSString* inputString = [NSString stringWithFormat:@"%4d%2d%2d",
                        year,month,day];

    NSDate *date = [dateFormatter dateFromString:inputString];

    return nil != date;
}

Wenn Sie ein gültiges Datum geben, dann dateFromString: wird erfolgreich sein, sonst wird es zurückkehren nil.

Andere Tipps

+(BOOL)dateExistsYear:(int)year month:(int)month day:(int)day{
    NSDateComponents *components = [[NSDateComponents alloc] init];

    [components setYear:year];
    [components setMonth:month];
    [components setDay:day];

    NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:components];

    [components release];
    components = [[NSCalendar currentCalendar] components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:date];
    if([components year] != year || [components month] != month || [components day] != day){
        return NO;
    }
    else{
        return YES;
    }
}

Ich habe das Bestehen aller Tage vom 1. Januar 2000 bis 12. Dezember 2012 überprüft.

2011-04-28 11:42:57.130 Test[1543:903] interval 1.103822 // using the above function  
2011-04-28 11:42:59.498 Test[1543:903] interval 2.367271 // using dateformatter

Es ist immer noch schneller, nur die Komponenten zu überprüfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top