设备当前区域设置后的格式化日期和时间

时间:2011-10-29 21:21:25

标签: ios localization nsdate date-formatting

我有一个NSDate对象,我可以从中创建两个NSStrings:日期和时间。目前我将日期格式设置为20111031,时间格式为23:15。

我想要做的是将其格式化为设备(iPhone,iPad,iPod Touch)当前区域设置(不是语言!)。例如:

  • 设置为美国地区的设备将显示(从我的头顶)10.31.11和时间晚上11:15
  • 设置为荷兰地区的设备将显示:2011年10月31日和时间23.15
  • 设置为瑞典语区域的设备将显示:2001-10-31和时间23:15

我该怎么做?

2 个答案:

答案 0 :(得分:37)

以下内容应该足够了,因为默认情况下NSDateFormatter具有手机的默认语言环境:

NSDate *date = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
[dateFormatter setDateStyle:NSDateFormatterShortStyle];
NSLog(@"%@",[dateFormatter stringFromDate:date]);

仅供参考,这是美国,荷兰和瑞典的情况:

[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];
NSLog(@"%@",[dateFormatter stringFromDate:date]);
// displays 10/30/11 7:09 PM 
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"nl_NL"]];
NSLog(@"%@",[dateFormatter stringFromDate:date]);
// displays 30-10-11 19:09
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"sv_SE"]];
NSLog(@"%@",[dateFormatter stringFromDate:date]);
// displays 2011-10-30 19:09

答案 1 :(得分:7)

这里有很多很棒的代码片段。在我看来,国际日期格式(当我想要的只是日期,而不是时间)的一个更好的是这是因为手机知道设置中的语言环境语言:

NSDate *date = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:NSLocaleIdentifier]];
[dateFormatter setTimeStyle:NO];
[dateFormatter setDateStyle:NSDateFormatterShortStyle];
NSLog(@"%@",[dateFormatter stringFromDate:date]);