【问题标题】:Compare NSDate times比较 NSDate 时间
【发布时间】:2014-07-16 16:17:48
【问题描述】:

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

如果 (10:37 > 09:00) // 做某事

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

【问题讨论】:

标签: ios objective-c nsdate


【解决方案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
    }
    

    这可能对你有帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多