2015-01-12 3 views
-2

enter image description hereNSDateFormatter возвращает полностью неверное значение

if (component != kDayComponent) 
    { 
     NSInteger i_d = [_datePicker selectedRowInComponent:kDayComponent], 
     i_m = [_datePicker selectedRowInComponent:kMonthComponent], 
     i_y = [_datePicker selectedRowInComponent:kYearComponent]; 

     NSString *d = _days[i_d]; 
//  NSString *m = [_months[i_m] length] == 1 ? [NSString stringWithFormat:@"0%@", _months[i_m]] : _months[i_m]; 
     NSString *m = i_m+1 < 10 ? [NSString stringWithFormat:@"0%d", i_m+1] : [NSString stringWithFormat:@"%d", i_m+1]; 
     NSInteger y = [_years[i_y] integerValue]; 
     NSString *completeDate = [NSString stringWithFormat:@"%@/%@/%ld", d, m, (long)y]; 

     NSDateFormatter *dateFormatter = [NSDateFormatter new]; 
     [dateFormatter setCalendar:[NSCalendar autoupdatingCurrentCalendar]]; 
     [dateFormatter setTimeZone:[NSTimeZone systemTimeZone]]; 
     [dateFormatter setDateFormat:@"DD/MM/YYYY"]; 

     NSDate *refreshDate = [dateFormatter dateFromString:completeDate]; 

//  NSDate *refreshDate = [self dateFromMonth:m.integerValue+1 
//           andYear:y 
//           andDay:d.integerValue+1]; 
     NSLog(@"refreshDate: %@", refreshDate.description); 

     [self refreshDaysFromDate:refreshDate]; 
    } 

Как вы можете видеть, completeDate имеет правильное значение даты строки, я пытаюсь форматировать его с NSDateFormatter и удерживать значение в refreshDate. Проблема refreshDate возвращает полностью неправильное значение, даже если я установил NSTimeZone или NSCalendar.

+0

Проконсультируйтесь с отличной документацией: http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns –

ответ

3

изменить дату форматировщик YYYY в гггг вы можете получить точные значения

[dateFormatter setDateFormat:@"dd/MM/yyyy"]; 

гггг определяет календарный год, тогда как YYYY определяет год (из «Недели года»), используется в календарном году ISO год.
В большинстве случаев yyyy и ГГГГ дают одинаковое количество, однако они могут быть разными. Как правило, вы должны использовать календарный год

+0

Также см. Https://developer.apple.com/library/ios /qa/qa1480/_index.html –

+1

Вы забыли указать важность «dd». «ДД» означает день, а не день месяца. –

+0

Это работает, во время выполнения я вижу, что результат в порядке, но он все еще печатает описание по-прежнему неправильно. –

1

изменить дату форматировщик только

dd/MM/yyyy 

это работа для меня.

1

Вам нужно «yyyy» не «YYYY» и «dd», а не «DD».

у = год
Y = год "Неделя года"

также (Thks Hot лижет):
д = день в месяц
D = день года

См: ICU Formatting Dates and Times

+0

И «dd», а не «DD». –

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