我想在if语句中比较两个不同的时间。堡垒的例子
if(10:37> 09:00)// DO SOMETHING
有没有办法使用NSDate和NSDateFormatter做到这一点?
答案 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
}
这可能对您有所帮助:)。