比较 NSDate 时间
Posted
技术标签:
【中文标题】比较 NSDate 时间【英文标题】:Compare NSDate times 【发布时间】:2014-07-16 16:17:48 【问题描述】:我想比较 if 语句中的两个不同时间。堡垒示例
如果 (10:37 > 09:00) // 做某事
有没有办法使用 NSDate 和 NSDateFormatter 做到这一点?
【问题讨论】:
是的,您可以通过阅读文档来完成,或者,如果您懒得这样做,请使用 Google。 请参阅 ***.com/questions/7370123/… 以获得应该有帮助的答案。 你有两次的格式是什么?他们是时间刺痛吗?完整的NSDate
对象?什么?答案取决于这些信息。
请参考***.com/questions/5388551/how-to-compare-time
【参考方案1】:
NSDate *date1;
NSDate *date2;
if([date1 laterDate:date2] == *it will return the later date, either date1 or date2*)
【讨论】:
这只有在两个日期恰好在同一天时才有效。 不。我在任何日期都使用它。评论前请告知自己 我的意思是 OP 似乎只想比较两个NSDate
对象的两个时间部分。如果这两个日期在不同的日期,您的支票将不起作用。实际上它有时会起作用,但并非适用于所有情况。
@rmaddy - OP 并没有真正准确地定义他的问题来说明这是对还是错。【参考方案2】:
试试这个
//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");
【讨论】:
OP 只想检查时间,而不是完整日期。 一个持有时间戳的 NSDate 对象没有?那么如果使用这个有什么问题呢?我使用日期格式创建的 2 个示例 NSDate 对象进行了测试 [dateformatter setDateFormat:@"HH:MM:SS"];它对我很有效。 您的答案应该显示该信息。它不适用于两个任意日期,但如果圆顶如您在评论中描述的那样有效。将该信息放入您的答案中。 更新了答案。请检查。我之前只添加了相关部分 这看起来不错,只是你不应该同时设置日期格式化程序的 dateStyle 和日期格式。我们不知道这是否是 OP 需要的。 OP 没有告诉我们他们实际上必须从什么开始。所以这个答案可能是完美的,也可能完全没用。【参考方案3】:您需要使用timeIntervalSinceDate
api 来比较两个不同的时间。
【讨论】:
这只有在两个日期恰好在同一天时才有效。【参考方案4】:据我了解,您只有时间,没有日期。实际上,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;
];
您可以保存此比较块并重复使用它。没有简单的比较方法并不重要。
【讨论】:
【参考方案5】: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 时间的主要内容,如果未能解决你的问题,请参考以下文章
NSDate 的一些操作(比较创建在现有date加减一定时间等)
NSDate.timeIntervalSinceDate 没有节时调整?