每当我尝试将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);
答案 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
进行日历计算。添加秒有时会给出错误的答案。