Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSTimeInterval并查看日期是否超过过去的一小时_Ios_Objective C_Nsdate - Fatal编程技术网

Ios NSTimeInterval并查看日期是否超过过去的一小时

Ios NSTimeInterval并查看日期是否超过过去的一小时,ios,objective-c,nsdate,Ios,Objective C,Nsdate,我觉得日期很不直观,也很混乱,所以就这样吧 我有一个带有日期的事件数组,如果任何一个事件的日期超过一个小时,我想将其删除 我使用的代码是: NSDate *now = [NSDate date]; Events *event = mutableEventsArray[i]; if (event.date!=nil) { NSTimeInterval sinceNow = [event.date timeIntervalSinceNow]; NSLog(@"sinceNow%@",

我觉得日期很不直观,也很混乱,所以就这样吧

我有一个带有日期的事件数组,如果任何一个事件的日期超过一个小时,我想将其删除

我使用的代码是:

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];
    }
}
日志事件。日期显示:
2018年5月7日星期一11:35:42

差别是17分钟或大约1020秒,远远少于一小时

但是,当我将时间间隔sinceNow记录到console时,我得到一个负数:sinceNow-97005.383634。这个数字大于3600,更不用说1020了。因此,计算
NSTimeInterval sinceNow=[event.date timeIntervalSinceNow]似乎有问题

我认为使用
NSTimeInterval
并没有考虑到日光节约时间和闰年,但我不认为这在这里适用


如果您对可能出现的问题有任何建议,我们将不胜感激。

-[NSDate timeintervalncesnow]
为过去的日期返回负值,为将来的日期返回正值。
要检查日期是否超过一小时前,您应该检查TimeIntervalenceNow是否为<-3600

-[NSDate TimeIntervalenceNow]
为过去的日期返回负值,为未来的日期返回正值。
要检查日期是否超过一小时前,您应该检查TimeIntervalenceNow是否为<-3600

如果您将计算转过来,您可能会更高兴:

NSTimeInterval ageOfEvent = [now timeIntervalSinceDate:event.date];
这给了
ageOfEvent
您期望的含义:它是自事件发生以来经过的时间,以秒为单位。那么你可以说

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

如果你把计算转过来,你可能会更高兴:

NSTimeInterval ageOfEvent = [now timeIntervalSinceDate:event.date];
这给了
ageOfEvent
您期望的含义:它是自事件发生以来经过的时间,以秒为单位。那么你可以说

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

请注意,
sinceNow
-97005.383634
。那是个负数。这意味着日期早于“现在”。而且比“现在”早了26个小时。我发现日期非常不直观和混乱——你可能会发现我写的很有用。任何时候你认为你应该手工做约会数学,你可能应该访问这个网站,然后重新考虑你的编码选择。(虽然你在这里可能很酷,>3600检查——只是,要小心)。注意
sinceNow
-97005.383634
。那是个负数。这意味着日期早于“现在”。它比“现在”早了大约26个小时。“我发现日期非常不直观和混乱”-你可能会发现我写的东西很有用。任何时候你认为你应该手工计算日期,你可能应该访问这个网站,然后重新考虑你的编码选择。(虽然您在这里可能很酷,但使用>3600的支票——只是要小心)。