【问题标题】:How to check if a particular date exists?如何检查特定日期是否存在?
【发布时间】:2011-04-28 03:03:38
【问题描述】:

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

 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 后检查组件是否与我订购的内容一致

【问题讨论】:

    标签: cocoa nsdate nscalendar


    【解决方案1】:

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

    【讨论】:

    • 那行得通。虽然使用"%04d%02d%02d" 对数字进行零填充。
    【解决方案2】:
    +(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] interval 1.103822 // 使用上面的函数
    2011-04-28 11:42:59.498 测试 [1543:903] 间隔 2.367271 // 使用日期格式化程序
    

    只检查组件还是比较快的。

    【讨论】:

    猜你喜欢
    • 2021-12-18
    • 1970-01-01
    • 2021-12-18
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    相关资源
    最近更新 更多