NSDate,根据用户的语言环境输出仅限数字的日期

时间:2011-11-22 18:21:12

标签: iphone ios nsdate nsdateformatter

我有这个问题,根据用户的语言环境显示用户的日期。但我希望日期只由数字组成。例如:2011/12/04 19:20:11。问题是我尝试使用NSDateFormatter并且根据语言环境它可以显示一个唯一的数字日期或一个像这样的单词:2011年1月1日,19:20:11。我希望语言环境只影响月,日和年的顺序。可以这样做吗?

1 个答案:

答案 0 :(得分:1)

说实话,我认为这是一个很糟糕的问题,直到我读到最后一行。 “我希望语言环境只影响月,日和年的顺序。可以这样做吗?”

固定日期格式(例如[formatter setDateFormat:@"HH:mm"])不会受到区域设置更改的影响。最好的办法是使用“NSDateFormatterStyle”为你做繁重的工作。

您的部分问题是您没有设置正确的日期格式化程序样式。 NSDateFormatterShortStyle已经输出了您想要的日期格式。

就时间格式而言,如果用户将其系统设置为24小时,那么NSTimeZoneNameStyleShortGeneric应该可以立即使用。但如果不是那样可以修复。它的美妙之处在于你无需检查。

// Example Date Now
NSDate *now = [NSDate date];
// Formatter set to proper locale by default
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
// Set formatter to short styles
[formatter setDateStyle:NSDateFormatterShortStyle];
[formatter setTimeStyle:NSTimeZoneNameStyleShortGeneric];

此时,您的格式化程序已经设置了自己的格式字符串“M/d/yy h:mm:ss a”,这将适用于美国。所以在这一点上我们要做的就是稍微改变格式。

// Remove the AM/PM from the format string
formatter.dateFormat = [formatter.dateFormat stringByReplacingOccurrencesOfString:@"a" withString:@""];
// Change 12h clock to 24h clock
formatter.dateFormat = [formatter.dateFormat stringByReplacingOccurrencesOfString:@"h" withString:@"H"];

现在您的日期格式应为“M/d/yy H:mm:ss”。这是您想要的美国版本。您可以使用日志声明进行确认。

NSLog(@"%@",[formatter stringFromDate:now]);

请注意,当您将格式中的“h”更改为“H”时,您并不关心它的位置。因此,如果在某些语言环境中它们具有相反的时间格式,它将被更改,但保留在原始位置。