之前文章讲过NSData的格式化(NSDate 格式化),今天来说一下实际代码使用中遇到的问题。
最近在工作中,需要将后台返回的时间字符串做格式化操作,期望格式是要展示成
09 Nov 2018 14:56:47
后台返回的时间字符串格式是 20181119175515
所以程序中代码自然就写成如下格式:
NSString* createTime =@"20181119175515";
NSDateFormatter* dateFormat = [[NSDateFormatter alloc] init];//实例化一个NSDateFormatter对象
[dateFormat setDateFormat:@"yyyyMMddHHmmss"];
NSDate*date =[dateFormat dateFromString:createTime];
[dateFormatsetDateFormat:@"dd MMM yyyy HH:mm:ss"];//设定时间格式,这里可以设置成自己需要的格式
NSString*currentDateStr = [dateFormat stringFromDate:date];
可是发现输出的是 19 11月 2018 17:55:15
同样的代码,更改手机系统语言为English,时间格式化输出的就是19 Nov 2018 17:55:15
如果更改其他语言,输出结果也会千奇百怪的。
这个时候,NSLocale类就派上了用场。
NSLocale类是将与国家和语言相关的信息进行简单的组合,包括货币、语言、国家等的信息。
将下面这段代码添加到dateFormat初始化之后
//根据需要设置国家代码
NSLocale *usLocale=[[NSLocale alloc]initWithLocaleIdentifier:@"en_US"];
dateFormat.locale=usLocale;
发现无论在什么系统语言下,时间格式化之后都是19 Nov 2018 17:55:15
NSLocale用法:
//当前用户设置的本地化对象
[NSLocale currentLocale]
//获取系统所有本地化标识符数组列表
[NSLocale availableLocaleIdentifiers] ;
//获取所有已知合法的国家代码数组列表
[NSLocale ISOCountryCodes] ;
//获取所有已知合法的ISO货币代码数组列表
[NSLocale ISOCurrencyCodes] ;
//获取所有已知合法的ISO语言代码数组列表
[NSLocale ISOLanguageCodes] ;
//获取当前系统设置语言的标识符
[[NSLocale currentLocale] localeIdentifier];
等价于
[[NSLocale currentLocale] objectForKey:NSLocaleIdentifier];
//常量
FOUNDATION_EXPORT NSLocaleKeyconst NSLocaleIdentifier;// 当前系统设置语言的标识符
FOUNDATION_EXPORT NSLocaleKeyconst NSLocaleLanguageCode;// 语言代码
FOUNDATION_EXPORT NSLocaleKeyconst NSLocaleCountryCode;// 国家代码
FOUNDATION_EXPORT NSLocaleKeyconst NSLocaleScriptCode;// 脚本代码
FOUNDATION_EXPORT NSLocaleKeyconst NSLocaleVariantCode;// NSString
FOUNDATION_EXPORT NSLocaleKeyconst NSLocaleExemplarCharacterSet;// NSCharacterSet
FOUNDATION_EXPORT NSLocaleKeyconst NSLocaleCalendar;// 当地日历
FOUNDATION_EXPORT NSLocaleKeyconst NSLocaleCollationIdentifier;// NSString
FOUNDATION_EXPORT NSLocaleKeyconst NSLocaleUsesMetricSystem;// NSNumber boolean
FOUNDATION_EXPORT NSLocaleKeyconst NSLocaleMeasurementSystem;// NSString
FOUNDATION_EXPORT NSLocaleKeyconst NSLocaleDecimalSeparator;// NSString
FOUNDATION_EXPORT NSLocaleKeyconst NSLocaleGroupingSeparator;// NSString
FOUNDATION_EXPORT NSLocaleKeyconst NSLocaleCurrencySymbol;// NSString
FOUNDATION_EXPORT NSLocaleKeyconst NSLocaleCurrencyCode;// 货币代码
FOUNDATION_EXPORT NSLocaleKeyconst NSLocaleCollatorIdentifierNS_AVAILABLE(10_6,4_0);// NSString
FOUNDATION_EXPORT NSLocaleKeyconst NSLocaleQuotationBeginDelimiterKey NS_AVAILABLE(10_6,4_0);// NSString
FOUNDATION_EXPORT NSLocaleKeyconst NSLocaleQuotationEndDelimiterKey NS_AVAILABLE(10_6,4_0);// NSString
FOUNDATION_EXPORT NSLocaleKeyconst NSLocaleAlternateQuotationBeginDelimiterKey NS_AVAILABLE(10_6,4_0);// NSString
FOUNDATION_EXPORT NSLocaleKeyconst NSLocaleAlternateQuotationEndDelimiterKey NS_AVAILABLE(10_6,4_0);// NSString
//获取当前语言的排版方向和字符方向
[NSLocale lineDirectionForLanguage:[[NSLocale currentLocale] objectForKey:NSLocaleLanguageCode];
[NSLocale characterDirectionForLanguage:[[NSLocale currentLocale] objectForKey:NSLocaleLanguageCode] ;
//获取用户的语言偏好设置列表,该列表对应于IOS中Setting>General>Language弹出的面板中的语言列表。
[NSLocale preferredLanguages];
//监听用户本地化设置的消息
[[NSNotification CenterdefaultCenter] addObserver:self selector:@selector(localChangedHandler:) name:NSCurrentLocaleDidChangeNotificationobject:nil];
//以本地化方式获取国际化信息的显示名称
NSLocale* curLocal = [[NSLocale alloc]initWithLocaleIdentifier:@"zh-Hans"] ;
NSLog(@"%@",[curLocal displayNameForKey:NSLocaleIdentifiervalue:@"fr_FR"] );//法文(法国)
curLocal= [[NSLocale alloc]initWithLocaleIdentifier:@"zh-Hant"] ;
NSLog(@"%@",[curLocal displayNameForKey:NSLocaleIdentifiervalue:@"fr_FR"]);//法文(法國)