ios - NSTimeInterval 并查看日期是否超过一个小时

标签 ios objective-c nsdate

我发现日期非常不直观且令人困惑,所以这里开始。

我有一系列带日期的事件,如果任何一个事件的日期超过一个小时,我想删除它。

我使用的代码是:

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 不考虑夏令时和闰年,但看不到它在这里如何适用。

如有任何关于问题的建议,我们将不胜感激。

最佳答案

如果你反过来计算,你可能会更快乐:

NSTimeInterval ageOfEvent = [now timeIntervalSinceDate:event.date];

这为 ageOfEvent 提供了您期望的含义:它是事件发生后耗时,以秒为单位。所以你可以说

if (ageOfEvent > 3600) {
    [mutableEventsArray removeObjectAtIndex:i];
}

关于ios - NSTimeInterval 并查看日期是否超过一个小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50218543/

相关文章:

iphone - NSPredicate ==查询

ios - 从服务器时间戳字符串获取 NSDate 对象

objective-c - 按 NSDate 对 NSMutableArray 中的 NSDictionaries 进行排序

ios - NSRangeException 崩溃无法删除 "heading"的观察者

ios - 在应用程序内购买

ios - 使用 ConvertCocoa64 脚本将 iOS 项目转换为 64 位

c++ - 如何将 Array 对象从 swift/objective-c 传递和转换为 C++?

objective-c - 如何以编程方式检索 OS X 中根磁盘分区的 UUID?

objective-c - 在 xib 文件上设置可访问性标识符

objective-c - 将 NSDate 从日历转换为另一个日历