解决方法
+ (NSString *)dateFormatFromTemplate:(NSString *)template options:(NSUInteger)opts locale:(NSLocale *)locale
根据文档:
Returns a localized date format string representing the given date format components arranged appropriately for the specified locale.
Return Value
A localized date format string representing the date format components given in template,arranged appropriately for the locale specified by locale.The returned string may not contain exactly those components given in template,but may—for example—have locale-specific adjustments applied.
Discussion
Different locales have different conventions for the ordering of date components. You use this method to get an appropriate format string for a given set of components for a specified locale (typically you use the current locale—see currentLocale).
The following example shows the difference between the date formats for British and American English:
NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; NSLocale *gbLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"]; NSString *dateFormat; // NOTE!!! I removed the 'y' from the example NSString *dateComponents = @"MMMMd"; //@"yMMMMd"; dateFormat = [NSDateFormatter dateFormatFromTemplate:dateComponents options:0 locale:usLocale]; NSLog(@"Date format for %@: %@",[usLocale displayNameForKey:NSLocaleIdentifier value:[usLocale localeIdentifier]],dateFormat); dateFormat = [NSDateFormatter dateFormatFromTemplate:dateComponents options:0 locale:gbLocale]; NSLog(@"Date format for %@: %@",[gbLocale displayNameForKey:NSLocaleIdentifier value:[gbLocale localeIdentifier]],dateFormat); // Output: // Date format for English (United States): MMMM d,y // Date format for English (United Kingdom): d MMMM y
// NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; formatter.locale = gbLocale; formatter.dateFormat = dateFormat; NSLog(@"date: %@",[formatter stringFromDate: [NSDate date]]);