iphone shortdate с 4-значным годом - PullRequest
7 голосов
/ 10 мая 2009

Я уверен, что просто что-то упустил. Но я гуглял это в течение нескольких дней, пытаясь найти способ показать 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];

Ответы [ 4 ]

11 голосов
/ 18 марта 2011

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

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;

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

10 голосов
/ 10 мая 2009

Если вам нужно четыре цифры года, установите 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];             
}

Обновлено с исправлением от Макса Маклеода

1 голос
/ 29 марта 2012

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

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];
0 голосов
/ 10 мая 2009

kCFDateFormatterShortStyle Задает короткий стиль, как правило, только числовой, например «23.11.37» или «15:30».

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

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

Источник

NSDateFormatterShortStyle, по-видимому, не дает четырехзначных лет.

...