Разница между "YYYY" и "yyyy" в NSDateFormatter

Что такое точная разница между "YYYY" и "yyyy". Я читал в этой ссылке, он утверждает, что

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

Но когда я пытаюсь использовать

NSString *stringDate = @"Feb 28, 2013 05:30pm";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMM dd, yyyy hh:mma"];
NSDate *date=[dateFormatter dateFromString:stringDate];
NSLog(@"Date 1 : %@",date); //2013-02-28 12:00:00 +0000

NSString *stringDatee = @"Feb 28, 2013 05:30pm";
NSDateFormatter *dateFormatterr = [[NSDateFormatter alloc] init];
[dateFormatterr setDateFormat:@"MMM dd, YYYY hh:mma"];
NSDate *datee=[dateFormatterr dateFromString:stringDatee];
NSLog(@"Date 2 : %@",datee); //2013-01-05 12:00:00 +0000

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"MMM dd, YYYY hh:mma"];
NSString *dateString = [dateFormat stringFromDate:datee];
NSLog(@"date 3 : %@", dateString); //Jan 05, 2013 05:30PM

Как здесь, результат для date и datee отличается, что я понял, но почему результат даты 2 и даты 3 различен? Поскольку я создаю дату из строки и снова меняю ее на строку, но выходные несоответствия?

Кто-нибудь знает причину о том же?. Хотя он определяет неделю в году, я все равно должен получить результат.

Спасибо..

ИЗМЕНИТЬ: -

Если код

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"MMM dd, YYYY hh:mma"];
NSString *dateString = [dateFormatterr stringFromDate:[NSDate date]];
NSLog(@"date: %@", dateString); //Feb 28, 2013 04:37PM

Если результат имеет правильный результат, но тот, который я передаю в качестве строки на дату, получаю 2013-01-05 12:00:00 +0000, проверяю дату 2 из NSLog, странный результат, почему?

Ответ 1

Также при использовании формата формата даты важно использовать правильный формат.

@ "YYYY" - недельный календарный год.

@ "yyyy" - обычный календарный год.

Вы можете пройти через весь блог, это хорошо, чтобы придать ему вид.

http://realmacsoftware.com/blog/working-with-date-and-time

Ответ 2

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

из Apple Docs

Ответ 3

dd/MMM/YYYY - e.g.:1 01/Jan/2000; answer : 19/dec/1999
              (see weekly calendar December month last Monday
              suppose leaf year + 1 day)
dd/MMM/yyyy - eg: ordinary - no problem.

Ответ 4

Все ответы, различающие yyyy и yyyy, являются правильными ответами на другой вопрос. Сам вопрос относится к другому.

Почему эти два значения отличаются? (извлечено из вопроса)

NSLog(@"Date 2 : %@",datee); //2013-01-05 12:00:00 +0000
NSLog(@"Date 3 : %@", dateString); //Jan 05, 2013 05:30PM

Ответ здесь @P.J заключается в том, что они не совсем разные по стоимости. Когда вы регистрируете NSDate (который является датой 2), вы получаете полное описание своего объекта, который находится в UTC Часовой пояс. Эта логика не возникает при регистрации даты 3, потому что она уже была преобразована в строку и применила ваш часовой пояс.

Для печати 3-го дня так же, как вы получаете дату 2. Вы должны указать UTC TimeZone для даты 3. Что-то вроде этого:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"MMM dd, YYYY hh:mma"];
[dateFormat setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
NSString *dateString = [dateFormat stringFromDate:datee];
NSLog(@"date 3 : %@", dateString); 

Надеюсь, что это поможет.

tl; dr Часовой пояс