使用dateByAddingTimeInterval时错误的日期

时间:2015-03-29 17:41:23

标签: objective-c

每当我尝试将timeInterval添加或减去当前日期时,我也会得到一个否定日期。这是我在调试器中使用的代码:

(lldb) po [[NSDate date] dateByAddingTimeInterval:30*24*60*60];
-5877520-03-03 -596:-31:-23 +0000

如果我使用正数或负数作为时间间隔并不重要,我总是得到负数。

我在我的项目中使用了CuppertinoYankee,但我删除了对它的引用并得到了相同的结果。

希望有人能帮助我。

亲切的问候

更新 NSLog的输出是:

2015-03-29 20:46:59:762 TestingProject[60975:607] start date: 
2015-03-29 20:46:59:763 TestingProject[60975:607] end date: 2015-04-28 18:46:59 +0000

,产生该输出的代码是:

NSUInteger startDaysBefore = 30;
NSUInteger endDaysAfter = 30;

NSDate *startDate = [[NSDate date] dateByAddingTimeInterval:(-startDaysBefore)*24*60*60];
NSDate *endDate = [[NSDate date] dateByAddingTimeInterval:endDaysAfter*24*60*60];

NSLog(@"start date: %@", startDate);
NSLog(@"end date: %@", endDate);

1 个答案:

答案 0 :(得分:1)

我无法在Yosemite(10.10.2(14C1514))的Xcode 6.2(6C131e)中重现这一点,但我的猜测是你正在使用旧版本的Xcode并且它正在搞乱参数类型。

时间间隔(NSTimeInterval)是double。您的表达式30*24*60*60的类型为int。我的猜测是你的Xcode没有认识到dateByAddingTimeInterval:接受double参数,因此它将参数作为int传递。

如果您将参数计算为double,Xcode会将其作为double传递。最简单的方法是将其中一个因素设为double,如下所示:

po [[NSDate date] dateByAddingTimeInterval:30.0*24*60*60]

我同意@ Rob的评论,通常你应该使用NSCalendar进行日历计算。添加秒有时会给出错误的答案。