NSDateFormatter +dateFormatFromTemplate:options:lo

2019-01-24 07:17发布

问题:

Please see below codes and output.

 NSDateComponents *dateComponents = [[[NSDateComponents alloc] init] autorelease];
 [dateComponents setYear:2011];
 [dateComponents setMonth:1];
 [dateComponents setDay:1];

 NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:dateComponents];

 NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
 [dateFormatter setDateFormat:[NSDateFormatter dateFormatFromTemplate:@"YYYYMMMd" options:0 locale:[NSLocale currentLocale]]];

 NSString *dateString = [dateFormatter stringFromDate:date];

 NSLog(@"Happy New Year: %@", dateString);

What do you expect for output?

 Happy New Year: Jan 1, 2011

But the result is...

 Happy New Year: Jan 1, 2010

What's wrong? Please help...

回答1:

The template format string should be @"yyyyMMMd" (lowercase "y" for year).

Uppercase "Y" is something else (see Unicode Date Format Patterns).