比较两个具有特定约束的 NSDates

Comparing Two NSDates with specific constraints

我正在努力在 3 个语句内完成,一个比较两次(存储为 NSDates)并分别根据两者之间的差异执行代码的检查。我希望实施的检查是 ( < 3min )、( > 3min < 3hrs ) 和 ( > 3hrs )。下面是我最近的尝试。任何建议将不胜感激,谢谢!

NSDateFormatter* df = [[NSDateFormatter alloc] init];
[df setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];
[df setTimeZone:[NSTimeZone systemTimeZone]];
[df setDateFormat:@""];
[df setDateFormat:@"hh:mm a MM-dd-yyyy"];

NSDate* newDate = [df dateFromString:[df stringFromDate:[[_radios objectAtIndex:indexPath.row] attributeForKey:@"date_time_edt"]]];

NSTimeInterval interval = [newDate timeIntervalSinceNow];

if(interval < 3 * 60) {
    img.image = [UIImage imageNamed:@"tire_green.png"];
    NSLog(@"%@", newDate);
    NSLog(@"%f", interval);
}
else if(interval > 3 * 60  && interval < 3 * 60 * 60) {
    img.image = [UIImage imageNamed:@"tire_yellow.png"];
    NSLog(@"%@", newDate);
}
else {
    img.image = [UIImage imageNamed:@"tire_red.png"];
    NSLog(@"%@", newDate);
}

根据过长的评论线程更新。

原来 [[_radios objectAtIndex:indexPath.row] attributeForKey:@"date_time_edt"] 返回一个 NSNumber 表示自 1970 年 1 月 1 日以来的毫秒数。因此不需要任何日期格式化程序。您可以从该值中获取日期,如下所示(需要秒,而不是毫秒):

NSNumber *timestamp = [[_radios objectAtIndex:indexPath.row] attributeForKey:@"date_time_edt"];
NSDate *newDate = [NSDate dateWithTimeIntervalSince1970:[timestamp doubleValue] / 1000];

现在您可以获得自"now"以来的时间间隔。请记住,如果 newDate 过去了(在您的情况下是这样),则结果间隔将为负数。

NSTimeInterval interval = [newDate timeIntervalSinceNow];

既然你知道 interval 永远是负数,因为 newDate 永远是过去,如果我们把它变成正数,你的检查会更容易。

interval = -interval; // now positive

现在您可以进行必要的检查以获得所需的图像。

if (interval < 3 * 60) { // < 3 minutes
    img.image = [UIImage imageNamed:@"tire_green.png"];
} else if (interval > 3 * 60 * 60) { // > 3 hours
    img.image = [UIImage imageNamed:@"tire_red.png"];
} else { // >= 3 minutes && <= 3 hours
    img.image = [UIImage imageNamed:@"tire_yellow.png"];
}