2009-05-10 7 views
5

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

[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]; 

ответ

10

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

+0

спасибо, но мне нужно локализовать – Dave

+0

, чтобы локализовать, добавить строку dateFormatter.locale = [NSLocale autoupdatingCurrentLocale]; –

+0

На самом деле вам также понадобится проверка в случае, если языковой формат уже yyyy, например. if ([formatString rangeOfString: @ "yyyy"]. location == NSNotFound) { NSString * fourDigitYearFormat = [[dateFormatter dateFormat] stringByReplacingOccurrencesOfString: @ "yy" withString: @ "yyyy"]; [dateFormatter setDateFormat: fourDigitYearFormat]; } –

0

kCFDateFormatterShortStyle Определяет короткий стиль, как правило, числовой только, например, «11/23/37» или «3:30 вечера».

Доступен в Mac OS X v10.3 и новее.

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

Source

NSDateFormatterShortStyle не появляется, чтобы дать вам 4 цифры года.

+3

это вид моей точки зрения. нет формата, который составляет месяц/день/год, который дает 4-значные годы. если я вставляю в формат, я теряю локализацию. это мое разочарование. – Dave

+1

На самом деле это зависит от региона: Дания - это тот, который дает вам четырехзначные годы в коротком формате. Это отличный тестовый пример, потому что он не использует «:» в разы. –

10

Только в том случае, кто-то спотыкается здесь, как я сделал «, потому что я нужна такая вещь с 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; 

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

+0

фантастический! Я всегда боролся с различными другими решениями, и это отразилось на ядре. Спасибо друг. Сохраняйте хорошую работу. – Felipe

1

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

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];