2013-04-29 2 views
0

Я пытаюсь создать datefromstring. Тем не менее, дата просто неверна, что создается. Может ли кто-нибудь увидеть что-то не так с моим кодом?Почему мой NSDateFormatter создает неправильную дату?

это код:

NSDateFormatter *format = [[NSDateFormatter alloc] init]; 
[format setDateFormat:@"MM/dd/YYYY hh:mm"]; 
[format setTimeZone:[NSTimeZone localTimeZone]]; 
NSString *datePart = [txtView.text substringToIndex:16]; 
NSLog(@"datepart: '%@'", datePart); 
NSDate *midDate = [format dateFromString:datePart]; 
NSLog(@"format middate: %@", [format stringFromDate:midDate]); 

это выход:

datepart: '04/29/2013 04:23' 
format middate: 01/05/2013 04:23 

Это, конечно, не январь любыми средствами - почему это так неправильно ??

Спасибо! R

+0

Попробуйте выполнить регистрацию 'midDate', прежде чем форматировать его обратно в строку и посмотреть, где он выходит –

+0

Выходит: 2013-01-05 09:39:00 +0000. так что это в методе datefromstring, я думаю. Есть идеи? – Rossi

ответ

2

Из Date Formatting Guide documentation:

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

Я дал образец кода пробега, используя как YYYY, так и yyyy, и yyyy дает правильный результат.

NSDateFormatter *format = [[NSDateFormatter alloc] init]; 
[format setDateFormat:@"MM/dd/yyyy hh:mm"]; 
[format setTimeZone:[NSTimeZone localTimeZone]]; 
NSString *datePart = @"04/29/2013 04:23"; 
NSLog(@"datepart: '%@'", datePart); 
NSDate *midDate = [format dateFromString:datePart]; 
NSLog(@"format middate: %@", [format stringFromDate:midDate]); 

Печатает

2013-04-29 21:40:42.450 Untitled[95290:707] datepart: '04/29/2013 04:23' 
2013-04-29 21:40:42.453 Untitled[95290:707] format middate: 04/29/2013 04:23 

Интересный факт!

Это было причиной ошибки «Не беспокоить», которую Apple имела в начале 2013 года, они использовали YYYY вместо yyyy. Some more info here.

+0

О, боже, я ненавижу эту ошибку, так легко получить, что эти два смешались –

+0

О, мужчина! Это хороший забавный факт - по крайней мере, Apple обманывала себя этим! Большое спасибо - вы спасли день! – Rossi

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