2011-04-28 51 views
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后检查,如果组件同意我订

回答

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

+2

这有效。尽管使用'“%04d%02d%02d”'来填零号码。 – jlstrecker 2012-11-19 03:40:05

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日全日存在于12月12日,2012年

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 

它仍然较快只是为了检查的组件。

+0

您的测试的上限应该是[2012年12月21日](http://en.wikipedia.org/wiki/December_21,_2012)。 ;) – 2011-04-28 21:52:25

+0

jaaaaaaa!的确......荣誉。 – 2011-04-29 00:32:26

相关问题