在Cocoa Touch中获取24/12小时的当前语言环境

时间:2009-12-13 10:46:04

标签: iphone objective-c cocoa cocoa-touch time

我正在试图弄清楚当前的语言环境是使用12小时还是24小时制。我一直在检查NSDateFormater无济于事。任何线索?

谢谢!

2 个答案:

答案 0 :(得分:3)

你最好的选择绝对是做[someNSDateFormatter stringFromDate:someDate]或[someNSDateFormatter dateFromString:someString],但是如果你真的想做你要问的事,那就看看Unicode standard for date format strings,这是iPhone OS使用的。

请注意,a用于AM / PM符号,而h / hh / H / HH / k / KK是小时符号的所有可能性,具体取决于它是从0还是1计数,是12还是24小时,用零或不用零填充。

实现这一点的代码可能类似于:

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

if([[dateFormatter dateFormat] containsString:@"a"]) {
    // do something
} else {
    // do something else
}

[dateFormatter release];

但是,你必须要小心,因为文字字符可以包含在单引号中,所以你必须考虑到这一点。您可以尝试寻找h或k,但请注意,因为法语代表下午2:05为14h05(不确定它是如何在iPhone上显示的,但这就是他们经常写的方式),所以时间格式可能包括像k'h'mm

这样的东西

答案 1 :(得分:1)

这不是语言环境设置,而是一组语言环境设置。它是时间格式的一部分,其中有四种(至少在Mac上),它们并不一定都使用相同的AM / PM指定。在Mac上,甚至可以使用带有AM / PM段的24小时小时段,输出如“17:35 PM”-silly,但仍然可能。

最简单的方法是让日期格式化程序为您设置日期对象的时间格式,假设这对您正在做的事情有意义。如果没有,有趣的时间就会朝着你的方向发展。

在iPhone上,格式字符串的UI只是一个切换开关(24小时,开启或关闭),因此您不必担心病态情况。在用户默认值中选择AppleICUTimeFormatStrings中的一个格式字符串,然后解析它,查找其中一个AM / PM format characters。请务必跳过''之间的任何内容,因为该内容是文字字符串,而不是格式字符。

请注意是否将应用程序带到了Mac上。如果你这样做,我不会费心去理解格式字符串 - 只需在你自己的首选项中设置一个复选框。