Разница между 'гггг' и 'гггг' в NSDateFormatter


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

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

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

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 разные? Как я создаю дату из строки и обращая то же самое в строку снова, но выходные несоответствия?

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

спасибо..

EDIT : -

если я код

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, странный результат, почему?

4   51   2013-02-28 14:49:15

4 ответа:

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

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

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

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

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

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

С Apple Docs

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.

все ответы дифференцируя 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 для даты 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 часовой пояс