2015-03-29 6 views
0

всякий раз, когда я пытаюсь добавить или вычесть timeInterval на текущую дату, я также получаю отрицательную дату. Это код, который я использую в отладчике:неправильная дата при использовании dateByAddingTimeInterval

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

Это не имеет значения, если я использую положительное или отрицательное число, как промежуток времени, я всегда получаю отрицательную дату.

Я использовал CuppertinoYankee в своем проекте, но я удалил ссылку на него и получил тот же результат.

Надеюсь, кто-то может мне помочь.

Сердечные приветы

UPDATE Выход 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

И какой результат, если вы используете NSLog? – gnasher729

+0

Попробуйте следующее: 'po [[NSDate date] dateByAddingTimeInterval: 30.0 * 24 * 60 * 60]' (Заметьте, что я написал '30.0' вместо' 30'.) Работает ли это? –

+0

Привет @robmayoff, это сработало отлично. Пожалуйста, опубликуйте его как ответ, чтобы я мог проверить его как решение. Большое спасибо!! – SantiFdezMunoz

ответ

1

Я не могу воспроизвести это в Xcode 6.2 (6C131e) на Yosemite (10.10.2 (14C1514)), но я предполагаю, что вы используете старую версию 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] 

Я согласен с @ комментарием Робы, который, как правило, вы должны использовать NSCalendar для календарных вычислений. Иногда добавление секунд дает неправильный ответ.

Смежные вопросы