2012-04-10 7 views
8

Ich habe das Gebietsschema und die Zeitzone festgelegt, aber wenn ich das Datum formatiere, erhalte ich immer ein ungültiges Datum. Der Monat ist immer Dezember und Jahr ist eins weniger als das angegebene Jahr. In meinem Fall brauche ich nicht die Tageskomponente.Formatieren von Monat und Jahr mit NSDateFormatter gibt ungültiges Datum zurück

Ich überprüfte andere ähnliche Post, aber es hat das Problem nicht gelöst.

Jede Hilfe wird geschätzt. Vielen Dank. Hier

ist der Code:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
dateFormatter.locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]; 
dateFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
[dateFormatter setDateFormat:@"MMM YYYY"]; 
NSDate *formattedDate = [dateFormatter dateFromString:@"Sep 2013"]; 
NSLog(@"Date: %@", [dateFormatter stringFromDate:formattedDate]); 
[dateFormatter release]; dateFormatter = nil; 

OUTPUT: Datum: Dec 2012

Antwort

15

"YYYY" Format für "Woche des Jahres" basierten Kalender verwendet. Verwenden Sie "JJJJ" Format-Spezifizierer stattdessen:

[dateFormatter setDateFormat:@"MMM yyyy"]; 
+0

Dieser Beitrag erklärt more.http : //stackoverflow.com/a/8187078/641062 – Vignesh

+0

@Vignesh, danke für den Link. Wahrscheinlich machen einige Formatbezeichner keinen Sinn für den Kalender "Woche des Jahres" und das führt zu anderen Ergebnissen. – Vladimir

+0

Danke für Informationen. :) – Vignesh

0

Ich wollte nur etwas zu der großen Antwort von Vladimir hinzufügen. Wenn Sie dies tun, bevor Sie Ihr Gebietsschema festlegen, scheint die Datumsformatierung verrückt zu werden. Was hatte ich das Gebietsschema zu tun eingestellt war, bevor das neue Format einstellen und dann die setDateFormat verwenden, um das auf der Lokalisierungs-basierte Format zu ändern used.So so etwas wie dies tun würde:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setLocale:[NSLocale currentLocale]];//I wanted to set the locale to wherever user is using my app in 
[formatter setDateFormat:@"MMM YYYY"]; 
NSDate *now = [NSDate Date]; 
NSString *fancyLookingDate = [formatter stringFromDate:now]; 
+0

Ich denke, '[Formatierer setDateStyle: NSDateFormatterShortStyle];' und '[Formatierer setTimeStyle: NSDateFormatterNoStyle];' sind redundant in Ihrem Code. Wenn Sie 'setDateFormat' verwenden, wird der vorherige Aufruf zum Festlegen von Datumsstil und Zeitformat ignoriert. –

+0

@YuchenZhong wusste nicht, dass Datum und Uhrzeit der Gedanken getrennt formatiert sind. Danke für die Rückmeldung. – Septronic

+0

@YuchenZhong Gerade meine Antwort bearbeitet, um Ihren Kommentar zu reflektieren. – Septronic

Verwandte Themen