Question

Je suis sûr qu'il me manque quelque chose. Mais j'ai googlé cela pendant des jours en essayant de trouver comment afficher une année à 4 chiffres lors de l'affichage d'un NSDate avec un style de NSDateFormatterShortStyle. S'il vous plaît laissez-moi savoir si vous avez une solution. Voici le code que j'utilise maintenant.

[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];
Était-ce utile?

La solution

Si vous avez besoin d’années à quatre chiffres, définissez la dateformat: en utilisant le format exact souhaité. L'inconvénient est que vous perdez le formatage automatique des paramètres régionaux.

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

...

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

Si vous avez besoin de localisation, vous pouvez essayer de modifier le format de date du style court.

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

Mis à jour avec le correctif de Max Macleod

Autres conseils

Au cas où quelqu'un trébucherait ici parce que j’avais besoin d’une telle chose avec une année à deux chiffres dans un format de date localisé et que c’est une question très ancienne, voici ma solution:

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;

Peut-être que quelqu'un pourrait l'utiliser de temps en temps ...

C'est un vieux fil, mais comme j'essayais de faire ce que Dave voulait et ne pouvait pas et parce qu'aucune des réponses données n'était correcte, voici la solution (au cas où quelqu'un voudrait jamais que ce soit la même chose):

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   Spécifie un style court, généralement numérique uniquement, tel que & # 8220; 11/23/37 & # 8221; ou & # 8220; 15 h 30 & # 8221;.

     

Disponible sous Mac OS X 10.3 et ultérieur.

     

Déclaré dans CFDateFormatter.h.

scroll top