Frage

Ich bin sicher, dass ich gerade bin etwas fehlt. Aber ich habe tagelang gegoogelt dies versuchen zu finden, wie ein 4-stelliges Jahr zeigen, wenn ein NSDate mit einem Stil von NSDateFormatterShortStyle angezeigt wird. Bitte lassen Sie mich wissen, wenn Sie eine Lösung. Hier ist der Code ich jetzt benutze.

[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];
War es hilfreich?

Lösung

Wenn Sie vierstellige Jahre benötigen, stellen Sie die dateformat: das genaue Format verwenden, wenn Sie möchten. Der Nachteil ist, dass Sie die automatische Formatierung locale verlieren.

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

...

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

Wenn Sie die Lokalisierung benötigen, dann können Sie versuchen, das Datumsformat der kurzen Stil zu ändern.

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

Aktualisiert mit Bugfix von Max Macleod

Andere Tipps

Nur für den Fall, dass jemand hier stolpert wie ich ‚hatte weil ich so etwas mit einem 2-stelligen Jahr in einem lokalisierten Datumsformat benötigt und das ist eine wirklich alte Frage, hier ist meine Lösung:

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;

Vielleicht ist es jemand könnte irgendwann verwenden ...

Dies ist ein alter Thread, sondern weil ich versuche, was Dave wollte und nicht konnte, und weil keiner der gegebenen Antworten richtig war, hier ist die Lösung (falls jemand jemals ist will die gleiche Sache):

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   Gibt einen kurzen Stil, in der Regel nur numerisch, wie „11/23/37“ oder „03.30“.

     

Erhältlich in Mac OS X v10.3 und höher.

     

erklärt in CFDateFormatter.h.

Quelle

NSDateFormatterShortStyle nicht erscheint Ihnen 4-stellige Jahre zu geben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top