Вопрос

Я уверен, что просто чего-то не хватает.Но я несколько дней гуглил это, пытаясь найти, как показать 4-значный год при отображении NSDate в стиле NSDateFormatterShortStyle.Пожалуйста, дайте мне знать, если у вас есть решение.Вот код, который я использую сейчас.

[NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehavior10_4];
    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease ];
    [dateFormatter setDateStyle:NSDateFormatterShortStyle];
    [dateFormatter setTimeStyle:NSDateFormatterNoStyle];

    // add label for birth
    UILabel *birthday = [[UILabel alloc] initWithFrame:CGRectMake(125, 10, 100, 25)];
    birthday.textAlignment = UITextAlignmentRight;
    birthday.tag = kLabelTag;
    birthday.font = [UIFont boldSystemFontOfSize:14];
    birthday.textColor = [UIColor grayColor];
    birthday.text = [dateFormatter stringFromDate:p.Birth];
Это было полезно?

Решение

Если вам нужны четырехзначные годы, установите dateformat: используя именно тот формат, который вы хотели бы.Недостатком является то, что вы теряете автоматическое форматирование локали.

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"MM/dd/yyyy"];

...

birthday.text = [dateFormatter stringFromDate:p.Birth];

Если вам нужна локализация, вы могли бы попробовать изменить формат даты в коротком стиле.

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease ];
[dateFormatter setDateStyle:NSDateFormatterShortStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];

if ([[dateFormatter dateFormat] rangeOfString:@"yyyy"].location == NSNotFound) { 
    NSString *fourDigitYearFormat = [[dateFormatter dateFormat] stringByReplacingOccurrencesOfString:@"yy" withString:@"yyyy"]; 
    [dateFormatter setDateFormat:fourDigitYearFormat];             
}

Обновлено с исправлением ошибки от Max Macleod

Другие советы

На всякий случай, если кто-то наткнется здесь, как это сделал я, потому что мне нужна была такая вещь с 2-значным годом в локализованном формате даты, и это действительно старый вопрос, вот мое решение:

NSLocale*           curLocale = [NSLocale currentLocale];
NSString*           dateFmt   = [NSDateFormatter dateFormatFromTemplate: @"ddMMyyyy"
                                                                options: 0
                                                                 locale: curLocale];
NSDateFormatter*    formatter = [[[NSDateFormatter alloc] init] autorelease];
                    [formatter setDateFormat:dateFmt];
NSString*           retText = [formatter stringFromDate:refDate];

return retText;

Может быть, кому-нибудь это когда-нибудь пригодится...

Это старая тема, но поскольку я пытался сделать то, что хотел и не смог Дэйв, и поскольку ни один из приведенных ответов не был правильным, вот решение (на случай, если кто-нибудь когда-нибудь захочет того же):

NSString *FormatString = [NSDateFormatter dateFormatFromTemplate:@"MM/dd/yyyy HH:mm" options:0 locale:[NSLocale currentLocale]];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:FormatString];
//Parse date here with the formater (like [formatter stringFromDate:date])
[formatter release];

kCFDateFormatterShortStyle Задает короткий стиль, обычно только числовой, такой как “23.11.37” или “15:30 вечера”.

Доступно в Mac OS X версии 10.3 и более поздних версиях.

Объявлено в CFDateFormatter.h.

Источник

Похоже, что NSDateFormatterShortStyle не дает вам 4-значных лет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top