Pergunta

Eu estou certo que eu apenas estou faltando alguma coisa. Mas eu pesquisei isso por dias tentando encontrar a forma de mostrar um ano de 4 dígitos ao exibir um NSDate com um estilo de NSDateFormatterShortStyle. Por favor, deixe-me saber se você tem uma solução. Aqui está o código que estou usando agora.

[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];
Foi útil?

Solução

Se precisar de quatro anos dígito, defina o dateformat: usando o formato exato que você gostaria. A desvantagem é que você perde locale automática formatação.

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

...

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

Se você precisar a localização, em seguida, você pode tentar modificar o formato da data do estilo curto.

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

Atualizado com Bugfix de Max Macleod

Outras dicas

Apenas no caso de que alguém tropeçar em aqui como eu fiz porque eu precisava de uma coisa dessas com um ano de 2 dígitos em um formato de data localizada e esta é uma pergunta muito velho, aqui está a minha solução:

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;

Talvez alguém poderia usá-lo algum dia ...

Esta é uma discussão antiga, mas porque eu estava tentando fazer o que Dave queria e não e porque nenhuma das respostas dadas foram correta, aqui está a solução poderia (no caso de alguém que nunca quer é a mesma coisa):

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 Especifica um estilo curto, normalmente apenas numérico, como “11/23/37” ou “3:30 pm”.

Disponível em Mac OS X v10.3 e posterior.

declarado em CFDateFormatter.h.

Fonte

NSDateFormatterShortStyle não parece dar-lhe 4 anos dígito.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top