两个日期之间的时间间隔返回 nil

Posted

技术标签:

【中文标题】两个日期之间的时间间隔返回 nil【英文标题】:Time Interval between two dates returns nil 【发布时间】:2016-07-15 14:28:00 【问题描述】:

我正在计算两个 NSDates 之间的时间差,它总是返回 0.0000。我使用相同的逻辑来计算时间戳并且格式也正确。当我尝试分别记录日期时,它会正确打印当我打印差异时,它会打印 0.0000... 这是计算日期的代码..

-(NSDate *) toLocalTime

NSTimeZone *tz = [NSTimeZone defaultTimeZone];
NSInteger seconds = [tz secondsFromGMTForDate: [NSDate date]];
return [NSDate dateWithTimeInterval: seconds sinceDate: [NSDate date]];

这是我发现不同之处的代码..

NSLog(@"the time when the location was updated is %@",timeWhenTheLocationWasUpdated);
NSLog(@"the time when the server was contacted last time was %@",timeWhenLastLocationPosted);

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd-MM-yyyy HH:mm:ss ZZZ"];
NSDate *timeofUpdatingLocation = [[NSDate alloc] init];
NSDate *timeofPostingToTheServer = [[NSDate alloc]init];
timeofUpdatingLocation = [dateFormatter dateFromString:timeWhenTheLocationWasUpdated];
timeofPostingToTheServer = [dateFormatter dateFromString:timeWhenLastLocationPosted];
NSTimeInterval difference = [timeofPostingToTheServer timeIntervalSinceDate:timeofUpdatingLocation];
NSLog(@"the difference between posting the location to the server and updating the location is %f",difference);

代码开头的两个 NSlog 都以日期格式化程序中提到的格式正确打印日期。

【问题讨论】:

用实际的日志输出更新您的问题。您还需要记录timeofUpdatingLocationtimeofPostingToTheServer(我猜都是nil)。 那么toLocalTime方法和问题有什么关系呢? 我的猜测是您的dateFromString 在两个日期都失败了,从而使两个日期相同,因此它们之间的时间为 0。 【参考方案1】:

在 Objective-C 中,向 nil 对象发送消息是完全合法的。你返回 0/nil/FALSE。

如果字符串与格式不匹配,NSdateFormatter 对象从对 dateFromString 的调用中返回 nil。

我的猜测是您对dateFromString 的调用失败并且timeofPostingToTheServer 为nil,所以您得到的是0。

(作为脚注,正如 rmaddy 在他的评论中所建议的那样,toLocalTime 似乎对您要解决的问题没有意义)

【讨论】:

以上是关于两个日期之间的时间间隔返回 nil的主要内容,如果未能解决你的问题,请参考以下文章

delphi中如何实现一个日期之间的间隔多少天?

请问两个时间点之间的间隔怎么算?

如何用excel计算两个日期之间相差的年数和月数

VB计算两个日期时间的间隔

js 两个日期间隔月数

Redshift - 在两个日期之间添加日期(月间隔)