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

时间:2015-08-07 19:06:24

标签: ios objective-c nsdate nsdateformatter

我正在努力在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);
}

1 个答案:

答案 0 :(得分:3)

根据漫长的评论帖子更新。

事实证明[[_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"];
}