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テスト[1543:903]間隔1.103822//上記の関数を使用  
2011-04-28 11:42:59.498テスト[1543:903]間隔2.367271//dateformatterを使用

コンポーネントをチェックするだけの方がさらに高速です。

于 2011-04-28T16:47:32.730 に答える