2011-04-28 128 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

相關問題