Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 比较NSDate时间_Ios_Objective C_Nsdate - Fatal编程技术网

Ios 比较NSDate时间

Ios 比较NSDate时间,ios,objective-c,nsdate,Ios,Objective C,Nsdate,我想在if语句中比较两个不同的时间。堡垒示例 如果10:37>09:00//做点什么 有没有办法使用NSDate和NSDateFormatter实现这一点?您需要使用TimeIntervalsIncestate api来比较两个不同的时间。试试这个 NSDate *date1; NSDate *date2; if([date1 laterDate:date2] == *it will return the later date, either date1 or date2*) //Dat

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

如果10:37>09:00//做点什么

有没有办法使用NSDate和NSDateFormatter实现这一点?

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

试试这个

NSDate *date1;
NSDate *date2;   
if([date1 laterDate:date2] == *it will return the later date, either date1 or date2*)
//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");
}

我理解你的问题,你只有时间,没有日期。事实上,NSDate并不是最好的选择,因为它代表了一个永恒的时刻

如果您只有时间或重复日期,那么NSDateComponents是更好的选择。在您的情况下,您可以定义所使用的组件(小时和分钟)

NSDateComponents有一个警告:no compare:method,但您可以轻松地将其作为

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;
}];
您可以保存此比较块并重新使用它。没有简单的比较方法也没什么大不了的

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
}

这可能会对您有所帮助:

是的,您可以通过阅读文档来完成,或者,如果您懒得这么做,可以使用谷歌。请参阅以获得有帮助的答案。这两次的格式是什么?它们是时间刺痛吗?完整的NSDate对象?什么答案取决于这些信息。请注意,这仅在两个日期恰好在同一天时有效。这仅在两个日期恰好在同一天时有效。否。任何约会我都用这个。请在评论之前告知自己我的观点是OP似乎只想比较两个NSDate对象的两个时间部分。如果两个日期在不同的日期,您的支票将不起作用。事实上,它有时会起作用,但并非适用于所有情况。@rmaddy-OP并没有以足够的精度定义他的问题,以判断这是正确的还是错误的。OP只想检查时间,而不是完整的日期。一个带有时间戳的NSDate对象否?那么使用这个有什么问题?我测试了两个使用日期格式[dateformatter setDateFormat:@HH:MM:SS]创建的示例NSDate对象;这对我很有效。你的答案应该显示这些信息。它不适用于任意两个日期,但如果您在评论中描述的那样。把这些信息放在你的答案里。更新答案。请查收。我之前只添加了相关的部分,看起来不错,只是您不应该同时设置日期格式化程序的日期样式和日期格式。我们不知道这是否是OP需要的。OP没有告诉我们他们必须从什么开始。所以这个答案可能是完美的,也可能是完全无用的。