Iphone 在Cocoa Touch中获取当前区域设置24/12小时样式

Iphone 在Cocoa Touch中获取当前区域设置24/12小时样式,iphone,objective-c,cocoa,cocoa-touch,time,Iphone,Objective C,Cocoa,Cocoa Touch,Time,我试图弄清楚当前区域设置是使用12小时还是24小时时钟。我一直在检查NSDateFormatter,但没有结果。有线索吗 谢谢 这与其说是一个区域设置,不如说是一组区域设置。它是时间格式的一部分,其中有四种(至少在Mac上),它们不一定都使用相同的AM/PM名称。在Mac电脑上,甚至可以使用一个24小时段和一个AM/PM段,输出像“17:35 PM”-愚蠢,但仍然可能 最简单的方法是让日期格式化程序为您格式化来自日期对象的时间,假设这对您正在做的事情有意义。如果不是的话,快乐时光就朝着你的方向前

我试图弄清楚当前区域设置是使用12小时还是24小时时钟。我一直在检查NSDateFormatter,但没有结果。有线索吗


谢谢

这与其说是一个区域设置,不如说是一组区域设置。它是时间格式的一部分,其中有四种(至少在Mac上),它们不一定都使用相同的AM/PM名称。在Mac电脑上,甚至可以使用一个24小时段和一个AM/PM段,输出像“17:35 PM”-愚蠢,但仍然可能

最简单的方法是让日期格式化程序为您格式化来自日期对象的时间,假设这对您正在做的事情有意义。如果不是的话,快乐时光就朝着你的方向前进

在iPhone上,格式字符串的UI只是一个切换开关(24小时、开或关),所以你不必担心病理病例。在用户默认设置中的
AppleICUTimeFormatStrings
中选择一个格式字符串,然后解析它,查找其中一个AM/PM。确保跳过
''
之间的任何内容,因为该内容是文字字符串,而不是格式字符


如果你将你的应用程序带到Mac上,请小心。如果你这样做,我就不会费心去理解格式字符串,只要在你自己的首选项中将其设置为一个复选框。

你最好的选择肯定是只做[someNSDateFormatter stringFromDate:someDate]或[someNSDateFormatter dateFromString:someString],但如果你真的想做你想做的事情,请看,这就是iPhone操作系统的用途

特别要注意的是,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的内容,非常感谢!似乎比它的价值更麻烦(而且不是很健壮)。。。我将在我的应用程序首选项下进行切换。如果在iPhone应用程序中进行切换,用户可能不会期望看到它和/或认为它是多余的,因为所有应用程序的设置(控制时间格式)中都已经有这样的切换。最糟糕的情况是,那天的评论员会过得很糟糕,会因为这个看似“重复的功能”而拒绝你的应用程序。