美文网首页
iOS应用在多语言环境下 区域的日期显示

iOS应用在多语言环境下 区域的日期显示

作者: XLsn0w | 来源:发表于2018-02-10 17:41 被阅读19次

在不同的语言环境下,应用展现出来的日期格式都是不一样的。例如英文的语言环境下,展现的日期January 27, 2014。而中文的语言环境下,展现的日期2014127

这是多语言环境下,任何应用必须面对的问题。

使用NSDateFormatter 可以处理好这个问题。这是apple人员在多种语言环境下打造出来的api,放心用。不必再去发明一个轮子。

对于数字的显示,NSNumberFormatter可以处理好这个问题。这里只介绍日期的显示格式。

我们要显示年月日,可以使用固有的类型NSDateFormatterFullStyle,可以显示符合各种语言环境下符合其语言特征的日期。

例如

法文在法国的显示方式27 janvier 2014

英文在美国的显示方式January 27, 2014

英文在英国的显示方式27 January 2014

当然,在中国就是这样:2014年1月27日

如果要加上一个星期几呢。也是一样的。

这是常见的显示格式使用默认的style都能处理好。但是,如果只显示年月呢。

我们该如何处理?

根据不同语言的显示不同设置自定义的dataformat,中文设置为yMMMM,英文设置为MMMMy。这样下来,且不是所有的语言都是设置一遍。这种方法又陷入之前的显示年月日的老路了。

可以根据NSDateFormatter的方法生成根据不同的语言区域生成一个日期格式来,这样不同的语言就实现了符合各自特征的日期格式。

NSString *dateComponents = @"yMMMMd";

NSString *dateFormat = [NSDateFormatter dateFormatFromTemplate:dateComponents options:0 locale:usLocale];

NSDateFormatter *dateFormatter = [[NSDateFormatteralloc] init];

[dateFormatter setTimeStyle:NSDateFormatterNoStyle];

[dateFormatter setDateStyle:NSDateFormatterFullStyle];

NSDate *date=[NSDatedate];

NSLog(@"Date for default locale %@: %@",

[[dateFormatterlocale] localeIdentifier], [dateFormatterstringFromDate:date]);

NSLocale *zhLocale = [[NSLocalealloc] initWithLocaleIdentifier:@"zh_CN"];

[dateFormattersetLocale:zhLocale];

NSLog(@"Date for locale %@: %@",

[[dateFormatterlocale] localeIdentifier], [dateFormatterstringFromDate:date]);

NSLocale *usLocale = [[NSLocalealloc] initWithLocaleIdentifier:@"en_US"];

[dateFormattersetLocale:usLocale];

//

NSLog(@"Date for locale %@: %@",

[[dateFormatterlocale] localeIdentifier], [dateFormatterstringFromDate:date]);

NSLocale *gbLocale = [[NSLocalealloc] initWithLocaleIdentifier:@"en_GB"];

[dateFormattersetLocale:gbLocale];

//

NSLog(@"Date for locale %@: %@",

[[dateFormatterlocale] localeIdentifier], [dateFormatterstringFromDate:date]);

NSLocale *frLocale = [[NSLocalealloc] initWithLocaleIdentifier:@"fr_FR"];

[dateFormattersetLocale:frLocale];

NSLog(@"Date for locale %@: %@",

[[dateFormatterlocale] localeIdentifier], [dateFormatterstringFromDate:date]);

2014-01-27 16:09:15.941 TestDragCV[3223:70b] Date for default locale en_US: Monday, January 27, 2014

2014-01-27 16:09:15.942 TestDragCV[3223:70b] Date for locale zh_CN: 2014127星期一

2014-01-27 16:09:15.943 TestDragCV[3223:70b] Date for locale en_US: Monday, January 27, 2014

2014-01-27 16:09:15.944 TestDragCV[3223:70b] Date for locale en_GB: Monday, 27 January 2014

2014-01-27 16:09:15.946 TestDragCV[3223:70b] Date for locale fr_FR: lundi 27 janvier 2014

NSString *dateFormat;

NSString *dateComponents = @"yMMMMd";

NSDateFormatter *monthAndYearFormatter=[[NSDateFormatteralloc] init];

dateFormat = [NSDateFormatterdateFormatFromTemplate:dateComponents options:0 locale:usLocale];

NSLog(@"Date format for %@: %@",

[usLocale displayNameForKey:NSLocaleIdentifiervalue:[usLocale localeIdentifier]], dateFormat);

monthAndYearFormatter.dateFormat=dateFormat;

NSLog(@"localeDateFormatOfYearMonth for default locale %@: %@",

[[monthAndYearFormatterlocale] localeIdentifier], [monthAndYearFormatterstringFromDate:[NSDatedate]]);

dateFormat = [NSDateFormatterdateFormatFromTemplate:dateComponents options:0 locale:gbLocale];

NSLog(@"Date format for %@: %@",

[gbLocale displayNameForKey:NSLocaleIdentifiervalue:[gbLocale localeIdentifier]], dateFormat);

monthAndYearFormatter.dateFormat=dateFormat;

NSLog(@"localeDateFormatOfYearMonth for default locale %@: %@",

[[monthAndYearFormatterlocale] localeIdentifier], [monthAndYearFormatterstringFromDate:[NSDatedate]]);

dateFormat = [NSDateFormatterdateFormatFromTemplate:dateComponents options:0 locale:frLocale];

NSLog(@"Date format for %@: %@",

[frLocale displayNameForKey:NSLocaleIdentifiervalue:[frLocale localeIdentifier]], dateFormat);

monthAndYearFormatter.dateFormat=dateFormat;

NSLog(@"localeDateFormatOfYearMonth for default locale %@: %@",

[[monthAndYearFormatterlocale] localeIdentifier], [monthAndYearFormatterstringFromDate:[NSDatedate]]);

dateFormat = [NSDateFormatterdateFormatFromTemplate:dateComponents options:0 locale:zhLocale];

NSLog(@"Date format for %@: %@",

[zhLocale displayNameForKey:NSLocaleIdentifiervalue:[zhLocale localeIdentifier]], dateFormat);

monthAndYearFormatter.dateFormat=dateFormat;

NSLog(@"localeDateFormatOfYearMonth for default locale %@: %@",

[[monthAndYearFormatterlocale] localeIdentifier], [monthAndYearFormatterstringFromDate:[NSDatedate]]);

NSLocale *tempLocale=[NSLocalecurrentLocale];

dateFormat = [NSDateFormatterdateFormatFromTemplate:dateComponents options:0locale:[NSLocalecurrentLocale]];

NSLog(@"Date format for %@: %@",

[gbLocale displayNameForKey:NSLocaleIdentifiervalue:[tempLocale localeIdentifier]], dateFormat);

monthAndYearFormatter.dateFormat=dateFormat;

NSLog(@"localeDateFormatOfYearMonth for default locale %@: %@",

[[monthAndYearFormatterlocale] localeIdentifier], [monthAndYearFormatterstringFromDate:[NSDatedate]]);

2014-01-27 16:10:48.542 TestDragCV[3241:70b] Date format for English (United States): MMMM d, y

2014-01-27 16:10:48.544 TestDragCV[3241:70b] localeDateFormatOfYearMonth for default locale en_US: January 27, 2014

2014-01-27 16:10:48.547 TestDragCV[3241:70b] Date format for English (United Kingdom): d MMMM y

2014-01-27 16:10:48.548 TestDragCV[3241:70b] localeDateFormatOfYearMonth for default locale en_US: 27 January 2014

2014-01-27 16:10:48.551 TestDragCV[3241:70b] Date format for fran?ais (France): d MMMM y

2014-01-27 16:10:48.551 TestDragCV[3241:70b] localeDateFormatOfYearMonth for default locale en_US: 27 January 2014

2014-01-27 16:10:48.554 TestDragCV[3241:70b] Date format for中文(中国): yMd

2014-01-27 16:10:48.554 TestDragCV[3241:70b] localeDateFormatOfYearMonth for default locale en_US: 2014127

2014-01-27 16:10:48.556 TestDragCV[3241:70b] Date format for English (United States): MMMM d, y

2014-01-27 16:10:48.557 TestDragCV[3241:70b] localeDateFormatOfYearMonth for default locale en_US: January 27, 2014

相关文章

  • iOS应用在多语言环境下 区域的日期显示

    在不同的语言环境下,应用展现出来的日期格式都是不一样的。例如英文的语言环境下,展现的日期January 27, 2...

  • iOS 多语言版本的开发

    iOS 多语言版本的开发 iOS 多语言版本的开发(一) iOS 多语言版本的开发(二)

  • 推送

    设备token iOS10之后注册推送,应用在前台也能显示通知栏,但不能在后台调用 iOS8之后注册推送,应用在前...

  • iOS多语言配置

    iOS 多语言配置(国际化) iOS app包显示名称可以国际化,具体方法如下: 基础设置 在info.plist...

  • 如何修改iOS应用在手机上的名称 PRODUCT_NAME?

    iOS应用在手机上可以显示本地化的名称。 1. 如果你想要修改 iOS app的名称。 修改 Info.plist...

  • iOS的Internationalization和localiz

    今天介绍如何使iOS应用支持多语言。 多语言支持本质是使用多个键值对列表,App在运行时根据当前机器的语言环境选择...

  • UITextField 的提示语placeholder 多行显示

    公司的新app有多语言, 登录注册的UITextField提示语多语言情况下显示不全, 所以需求是提示语多行,输入...

  • ios应用的多语言支持

    ios应用的多语言支持主要包括应用名称的多语言、字符串的多语言、sotrybard多语言等等要添加多语言,首先需要...

  • JMeter:时间函数___timeShift

    __TimeShift(格式,日期,移位,语言环境,变量):可对日期进行移位加减操作 格式- 将显示创建日期的格式...

  • 兼容性问题

    iOS设备 日期字符串转日期后显示NaN iOS系统不支持2017-01-01格式的时间,只识别2017/01/0...

网友评论

      本文标题:iOS应用在多语言环境下 区域的日期显示

      本文链接:https://www.haomeiwen.com/subject/euchtftx.html