2013-07-19 2 views
1

После почти безумного поиска, где мой код не удался ... Я смог изолировать это странное поведение. Посмотрите на то, что hapens когда вычитая -200 днейОшибка в dateByAddingTimeInterval


NSDate *now = [NSDate date]; //now is 2013-07-19 

NSDateFormatter *format = [[NSDateFormatter alloc] init]; 
[format setDateFormat:@"YYYY-MM-dd"]; 

NSDate *newDate1 = [now dateByAddingTimeInterval:60*60*24*-199]; 
newDateTmp=[format stringFromDate:newDate1]; 
NSLog(@"now:%@ newDateTmp:%@",now,newDateTmp); 

newDate1 = [now dateByAddingTimeInterval:60*60*24*-200]; 
newDateTmp=[format stringFromDate:newDate1]; 
NSLog(@"now:%@ newDateTmp:%@",now,newDateTmp); 

newDate1 = [now dateByAddingTimeInterval:60*60*24*-201]; 
newDateTmp=[format stringFromDate:newDate1]; 
NSLog(@"now:%@ newDateTmp:%@",now,newDateTmp); 

newDate1 = [now dateByAddingTimeInterval:60*60*24*-365]; 
newDateTmp=[format stringFromDate:newDate1]; 
NSLog(@"now:%@ newDateTmp:%@",now,newDateTmp); 

журналы:

2013-07-19 15: 58: 46.123 Вендес [2927: 907] Сейчас: 2013-07- 19 13:58:46 +0000 newDateTmp: 2013-01-01 // Это нормально

2013-07-19 15: 58: 46.124 Вендес [2927: 907] Сейчас: 2013-07-19 13 : 58: 46 +0000 newDateTmp: 2013-12-31 // Это я NCORRECT !!!! Посмотрите на ГОД

2013-07-19 15: 58: 46.125 Вендес [2927: 907] Сейчас: 2013-07-19 13:58:46 +0000 newDateTmp: 2012-12-30 // Это ОК

2013-07-19 15: 58: 46.127 Вендес [2927: 907] сейчас: 2013-07-19 13:58:46 +0000 newDateTmp: 2012-07-19 // Это нормально


Я предполагаю, что это будет hapopen и завтра вычитая 201 .. ?? :)

Есть идеи?

Thks

PS. Я решил это, используя

NSDate *newDate1= [NSDate dateWithTimeInterval:60*60*daysToAdd sinceDate:now]; 

, который работает на любые дниДобавить значение.

ответ

5

Это не ошибка. Формат, который вы используете, неверен. Он должен быть

@"yyyy-MM-dd" 

с более низким обсаженным y


More information на верхнем регистр Y:

Y - год (в "Неделе года" на основе календарей). В этом году обозначение используется в календарном году ISO год, как определено ISO 8601, но может быть , используемым в календарных системах, не относящихся к григорианскому периоду, где требуется дата недели . Может не всегда быть таким же значением, как календарь год.

+2

Из документации Apple, по дате форматирования: «Распространенной ошибкой является использование YYYY YYYY определяет календарный год, тогда как YYYY определяет год (из.„Неделя года“), используемый в год-недельного календаря ISO. В большинстве случаев yyyy и YYYY дают одинаковое количество, однако они могут быть разными. Обычно вы должны использовать календарный год ». https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html#//apple_ref/doc/uid/TP40002369-SW1 –

+0

Ничего себе! Большое спасибо, я бы никогда не догадался. – DeepButi

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