据我了解,您只有时间,没有日期。实际上,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;
}];
您可以保存此比较块并重复使用它。没有简单的比较方法并不重要。