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