Как проверить, существует ли конкретная дата? - PullRequest
4 голосов
/ 28 апреля 2011

как я могу проверить, существует ли конкретная дата?Например, если я сделаю следующее:

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

, я просто получу 1 марта.Я не могу найти функцию, которая позволяет это, единственный способ, которым я могу это сделать, - это проверить после создания NSDate, согласуются ли компоненты с тем, что я заказал

Ответы [ 2 ]

8 голосов
/ 28 апреля 2011

Вы можете использовать метод -[NSDateFormatter dateFromString:]:

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

Если вы дадите правильную дату, то dateFromString: будет успешным, в противном случае он вернет nil.

4 голосов
/ 28 апреля 2011
+(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;
    }
}

Я проверил существование всех дней с 1 января 2000 г. по 12 декабря 2012 г.

...