比较NSDate时间

时间:2014-07-16 16:17:49

标签: ios objective-c nsdate

我想在if语句中比较两个不同的时间。堡垒的例子

if(10:37> 09:00)// DO SOMETHING

有没有办法使用NSDate和NSDateFormatter做到这一点?

5 个答案:

答案 0 :(得分:0)

您需要使用timeIntervalSinceDate api来比较两个不同的时间。

答案 1 :(得分:0)

NSDate *date1;
NSDate *date2;   
if([date1 laterDate:date2] == *it will return the later date, either date1 or date2*)

答案 2 :(得分:0)

试试这个

//Date formatter - to format the sample dates using for comparison
NSDateFormatter *dateformatter = [[NSDateFormatter alloc]init];
[dateformatter setDateFormat:@"HH:MM:SS"];

// Creating 2 sample dates
NSDate *date1 = [dateformatter dateFromString:@"10:10:10"];
NSDate *date2 = [dateformatter dateFromString:@"10:10:20"];

if (NSOrderedDescending == [date1 compare:date2])// Here comparing the dates 
{
    NSLog(@"date1 later than date 2");
}
else
{
    NSLog(@"date2 later than date 1");
}

答案 3 :(得分:0)

据我了解你的问题,你只有时间,而不是约会。实际上,与NSDate不是最好的选择,因为它代表了永恒的一个时刻。

如果您只有时间或重复日期,NSDateComponents是更好的选择。您可以定义使用的组件,以小时和分钟为单位。

NSDateComponents有一个警告:没有compare:方法,但您可以轻松比较

if (date1Comps.hour < date2Comps.hour) {
    NSLog(@"date 1 earlier");
} else if(date1Comps.hour > date2Comps.hour) {
    NSLog(@"date 2 earlier");

} else {
    if (date1Comps.minute < date2Comps.minute) {
        NSLog(@"date 1 earlier");
    } else if(date1Comps.minute > date2Comps.minute){
        NSLog(@"date 2 earlier");
    } else {
        NSLog(@"same hour, same minute");
    }
}

这里是完整的代码,包括从日期创建组件。

NSString *date1String = @"2014-07-18T10:30";
NSString *date2String = @"2014-07-18T10:45";

NSDateFormatter *f = [[NSDateFormatter alloc] init];
[f setDateFormat:@"yyyy-MM-dd'T'HH:mm"];
NSDate *date1 = [f dateFromString:date1String];
NSDate *date2 = [f dateFromString:date2String];

NSDateComponents *date1Comps = [[NSCalendar currentCalendar] components:(NSCalendarUnitHour|NSCalendarUnitMinute) fromDate:date1];

NSDateComponents *date2Comps = [[NSCalendar currentCalendar] components:(NSCalendarUnitHour|NSCalendarUnitMinute) fromDate:date2];

if (date1Comps.hour < date2Comps.hour) {
    NSLog(@"date 1 earlier");
} else if(date1Comps.hour > date2Comps.hour) {
    NSLog(@"date 2 earlier");

} else {
    if (date1Comps.minute < date2Comps.minute) {
        NSLog(@"date 1 earlier");
    } else if(date1Comps.minute > date2Comps.minute){
        NSLog(@"date 2 earlier");
    } else {
        NSLog(@"same hour, same minute");
    }
}

或类似的:在数组中订购日期组件

NSArray *times = [@[date1Comps, date2Comps] sortedArrayUsingComparator:^NSComparisonResult(NSDateComponents *date1Comps, NSDateComponents *date2Comps) {
    if (date1Comps.hour < date2Comps.hour) {
        return NSOrderedAscending;
    } else if(date1Comps.hour > date2Comps.hour) {
        return NSOrderedDescending;
    } else {
        if (date1Comps.minute < date2Comps.minute) {
            return NSOrderedAscending;
        } else if(date1Comps.minute > date2Comps.minute){
            return NSOrderedDescending;
        }
    }
    return NSOrderedSame;
}];

您可以保存此比较块并重复使用它。比没有简单的比较方法更重要。

答案 4 :(得分:0)

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:[NSDate date]];
NSInteger todayHour = [components hour];
NSInteger currentMinute = [components minute];
if (currentHour < 7 || (currentHour > 21 || currentHour == 21 && (currentMinute > 0 || currentMinute > 0))) {
// Do your task
}

这可能对您有所帮助:)。