2013-02-12 25 views
0

我最近一直在使用NSLocalizedStrings的应用程序的法语版本工作,到目前为止一切工作都很棒。iOS如何用另一种语言显示日期,

但我现在的问题是日期。我经常在我的应用程序中以不同的格式显示日期,具体情况取决于情况。

例:

-Fri Feb 22, 2013 
-Monday February 18, 2013 
-Feb 18 
-Dec 5, 2012 

的事情是,在法国的日期是不仅在一个月的名称方面不同,而且在哪个月,日和年出现的顺序。

例:

-Dec 5, 2012 would be 5 Dec 2012 
-Monday February 18, 2013 would be Lundi le 18 Fevrier 2013. 

我在Localizable.string文件中的个人月/日的名称,但我如何管理它是如何显示的顺序。

我应该有一个if语句来检查,像这样?:

NSString *currentLanguage = [[NSLocale preferredLanguages] objectAtIndex:0]; 

if([currentLanguage isEqualToString:@"fr"]) 
{ 
    //Handle French logic 
} 

当前设备的语言这可能不是去它的最好方式。

任何想法?

回答

1

使用NSDateFormatter。例如:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 
[dateFormatter setTimeStyle:NSDateFormatterNoStyle]; 

NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:162000]; 

NSString *formattedDateString = [dateFormatter stringFromDate:date]; 
NSLog(@"formattedDateString: %@", formattedDateString); 

NSDateFormatterMediumStyle将根据用户的偏好(英语,法语等)自动格式化日期。

如果您需要自定义样式并且应用程序在iOS 4中运行。0+,你可以在你的日期格式使用自定义模板:

NSString *formatString = [NSDateFormatter dateFormatFromTemplate:@"EdMMMyyy" options:0 
              locale:[NSLocale currentLocale]]; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:formatString]; 

NSString *todayString = [dateFormatter stringFromDate:[NSDate date]]; 
NSLog(@"todayString: %@", todayString); 
+0

谢谢。我可以按照我的问题格式化日期吗? – PaulG 2013-02-12 19:11:06

+0

我怎样才能得到2月12日? – PaulG 2013-02-12 19:25:45

+1

@PaulG检查我的更新答案。如果您需要使用自定义样式呈现日期,则根据用户的语言环境(或任何其他语言环境),'dateFormatFromTemplate:options:locale:'方法会返回一个自定义格式字符串。这将处理特定于区域设置的顺序和其他事情。 – 2013-02-12 19:45:46

1

设置正确的语言环境,以你的NSDateFormatter,当您转换日期字符串,则日期格式将负责根据用户设置的格式的所有细节你:

NSDateFormatter *formatter = ... // Create and setup formatter 
[formatter setLocale:[NSLocale autoupdatingCurrentLocale]]; 
// Now you can convert date to string 
3

您应该使用NSDateFormatter,并给它所需NSLocale这样的:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"nl_NL"]; 
dateFormatter.dateFormat = @"EEEE d MMMM yyyy HH:mm"; 

“EEEE”是一周,这在我的情况下,将显示在荷兰人的一天的全名。

+0

这改变了措辞很好,但没有顺序。 2013年1月2日星期三00:00变成mercredi 2 2013年1月00:00这对法国人来说很好,但英文日期不是这样写的。 – PaulG 2013-02-12 18:58:31

1

这是probaly容易得多: 也有一些是被称为

NSDateFormatterShortStyle, 
NSDateFormatterMediumStyle 
NSDateFormatterLongStyle 

设置日期和时间组件单独:

[dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 
[dateFormatter setTimeStyle:NSDateFormatterNoStyle]; 

,iOS将格式化正确,如果用户的语言。

而且看Data Formatting Guide

相关问题