4

如何检查特定日期是否存在?例如,如果我执行以下操作:

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

我会在 3 月 1 日收到。我找不到允许这样做的功能,我能做到的唯一方法是在创建 NSDate 后检查组件是否与我订购的内容一致

4

2 回答 2

8

您可以使用以下-[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

于 2011-04-28T03:36:45.897 回答
4
+(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;
    }
}

我检查了从 2000 年 1 月 1 日到 2012 年 12 月 12 日的所有日子的存在。

2011-04-28 11:42:57.130 Test[1543:903] 间隔 1.103822 // 使用上述函数  
2011-04-28 11:42:59.498 测试 [1543:903] 间隔 2.367271 // 使用日期格式化程序

仅检查组件仍然更快。

于 2011-04-28T16:47:32.730 回答