NSTimeInterval 并查看日期是否超过一个小时
NSTimeInterval and seeing if a date is more than an hour in the past
我发现日期非常不直观且令人困惑,所以这里是。
我有一组带日期的事件,如果任何一个事件的日期超过一个小时,我想删除它。
我使用的代码是:
NSDate *now = [NSDate date];
Events *event = mutableEventsArray[i];
if (event.date!=nil) {
NSTimeInterval sinceNow = [event.date timeIntervalSinceNow];
NSLog(@"sinceNow%@",sinceNow);
NSTimeInterval hourInterval = 3600;
if (sinceNow<hourInterval) {
[mutableEventsArray removeObjectAtIndex:i];
}
}
问题是它正在删除过去不到一个小时的事件。
在一个示例中,我只是 运行,将 now
记录到控制台显示:
Mon May 7 11:52:31 2018
记录 event.date 显示:Mon May 7 11:35:42 2018
相差 17 分钟或大约 1020 秒,不到一个小时。
但是,当我将时间间隔 sinceNow 记录到控制台时,我得到一个负数:sinceNow-97005.383634。这个数字大于 3600 更不用说 1020 了。所以计算似乎有问题 NSTimeInterval sinceNow = [event.date timeIntervalSinceNow];
我 have read 使用 NSTimeInterval
没有考虑夏令时和闰年,但看不出这在此处如何适用。
如果有任何关于可能是什么问题的建议,我们将不胜感激。
-[NSDate timeIntervalSinceNow]
returns 过去日期的负值和未来日期的正值。
要检查日期是否超过一个小时之前,您应该检查 timeIntervalSinceNow 是否 < -3600
如果你反过来计算你可能会更快乐:
NSTimeInterval ageOfEvent = [now timeIntervalSinceDate:event.date];
这为 ageOfEvent
提供了您期望的含义:它是事件发生后经过的时间,以秒为单位。所以你可以说
if (ageOfEvent > 3600) {
[mutableEventsArray removeObjectAtIndex:i];
}
我发现日期非常不直观且令人困惑,所以这里是。
我有一组带日期的事件,如果任何一个事件的日期超过一个小时,我想删除它。
我使用的代码是:
NSDate *now = [NSDate date];
Events *event = mutableEventsArray[i];
if (event.date!=nil) {
NSTimeInterval sinceNow = [event.date timeIntervalSinceNow];
NSLog(@"sinceNow%@",sinceNow);
NSTimeInterval hourInterval = 3600;
if (sinceNow<hourInterval) {
[mutableEventsArray removeObjectAtIndex:i];
}
}
问题是它正在删除过去不到一个小时的事件。
在一个示例中,我只是 运行,将 now
记录到控制台显示:
Mon May 7 11:52:31 2018
记录 event.date 显示:Mon May 7 11:35:42 2018
相差 17 分钟或大约 1020 秒,不到一个小时。
但是,当我将时间间隔 sinceNow 记录到控制台时,我得到一个负数:sinceNow-97005.383634。这个数字大于 3600 更不用说 1020 了。所以计算似乎有问题 NSTimeInterval sinceNow = [event.date timeIntervalSinceNow];
我 have read 使用 NSTimeInterval
没有考虑夏令时和闰年,但看不出这在此处如何适用。
如果有任何关于可能是什么问题的建议,我们将不胜感激。
-[NSDate timeIntervalSinceNow]
returns 过去日期的负值和未来日期的正值。
要检查日期是否超过一个小时之前,您应该检查 timeIntervalSinceNow 是否 < -3600
如果你反过来计算你可能会更快乐:
NSTimeInterval ageOfEvent = [now timeIntervalSinceDate:event.date];
这为 ageOfEvent
提供了您期望的含义:它是事件发生后经过的时间,以秒为单位。所以你可以说
if (ageOfEvent > 3600) {
[mutableEventsArray removeObjectAtIndex:i];
}