比较两个具有特定约束的 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"];
}
我正在努力在 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"];
}