2009-05-10 11 views
5

Je suis sûr que je manque juste quelque chose. Mais j'ai googlé cela pendant des jours en essayant de trouver comment montrer 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.iphone shortdate avec l'année à 4 chiffres

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

Répondre

10

Si vous avez besoin de quatre ans de chiffres, définissez le dateformat: en utilisant le format exact que vous souhaitez. 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 Correctif de Max Macleod

+0

merci mais j'ai besoin localisée – Dave

+0

pour localiser, ajouter la ligne dateFormatter.locale = [NSLocale autoupdatingCurrentLocale]; –

+0

En fait, vous aurez également besoin d'une vérification dans le cas où le format spécifique au lieu est déjà aaaa, par ex. if ([formatString rangeOfString: @ "aaaa"]. location == NSNotFound) { NSString * fourDigitYearFormat = [[dateFormatter dateFormat] stringByReplacingOccurrencesOfString: @ "yy" withString: @ "aaaa"]; [dateFormatter setDateFormat: fourDigitYearFormat]; } –

0

kCFDateFormatterShortStyle Spécifie un style court, généralement numérique seulement, comme « 23/11/37 » ou « 15h30 ».

Disponible dans Mac OS X 10.3 et versions ultérieures.

Déclaré dans CFDateFormatter.h.

Source

NSDateFormatterShortStyle ne semble pas vous donner 4 ans de chiffres.

+3

c'est genre de mon point. il n'y a pas de format mois/jour/année qui donne des années à 4 chiffres. si je mets un format, je perds la localisation. C'est ma frustration. – Dave

+1

En fait, il dépend des paramètres régionaux: le Danemark est celui qui vous donne des années à 4 chiffres en format court. C'est un bon cas de test car il n'utilise pas ':' dans les temps. –

10

Juste au cas où quelqu'un trébuche ici comme je l'ai fait « parce que je avais besoin d'une telle chose avec une année à 2 chiffres dans un format de date localisée, ce qui 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 quelque temps ...

+0

fantastique! J'ai toujours lutté avec diverses autres solutions et cela a frappé le noyau. Merci mon pote. Continuez à faire du bon travail. – Felipe

1

Ceci est un vieux thre annonce, mais parce que je tentais de faire ce que Dave voulait et ne pouvait pas et parce que aucune des réponses données où correcte, voici la solution (au cas où quelqu'un jamais envie est 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];