我发现日期非常直观且令人困惑,所以这里就是这样。
我有一系列包含日期的事件,如果任何一个日期超过一个小时,我想删除它。
我正在使用的代码是:
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-97005.383634。这个数字大于3600,更不用说1020了。所以计算NSTimeInterval sinceNow = [event.date timeIntervalSinceNow];
使用NSTimeInterval
的{{3}}没有考虑DaylightSavings Time和闰年,但是没有看到这将如何适用。
欢迎任何有关问题的建议。
答案 0 :(得分:2)
myClass
返回过去日期的负值和未来日期的正值。
要检查日期是否超过一小时,您应该检查timeIntervalSinceNow是否&lt; -3600
答案 1 :(得分:2)
如果你改变计算,你可能会更开心:
NSTimeInterval ageOfEvent = [now timeIntervalSinceDate:event.date];
这为ageOfEvent
提供了您期望的含义:它是自事件以来经过的时间,以秒为单位。所以你可以说
if (ageOfEvent > 3600) {
[mutableEventsArray removeObjectAtIndex:i];
}