从当前日历/区域设置获取时间格式(上午/下午或24小时)

时间:2014-04-16 16:21:11

标签: macos nsdateformatter nscalendar nslocale

我想创建自定义时间格式,但我需要知道用户的系统首选项是否需要24小时或AM / PM格式。我查看了NSCalendar和NSLocale但找不到它。

*** UPDATE

由于另一个问题没有明确让我们知道如果用户想要24小时时间风格如何获取,我正在回答我发现的其他2个问题中的这个问题。但是如果能起作用仍然需要确认吗?

NSString *fmt = [NSDateFormatter dateFormatFromTemplate:@"jm" options:0 locale:[NSLocale currentLocale]];


BOOL is24HourStyle = [fmt rangeOfString:@"HH"].location != NSNotFound;
NSLog(@"%@", fmt);
NSLog(@"is 24 %@", is24HourStyle ? @"YES" : @"NO");

1 个答案:

答案 0 :(得分:1)

根据http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns

  • 'j'是用于灵活日期模式生成的专用符号。它请求区域设置的首选小时格式,并且必须替换为'h','H','K'或'k'。
  • 'h'和'K'是12小时循环格式的符号。
  • 'H'和'k'是24小时循环格式的符号。

因此,要检查24小时格式,您应该检查格式中是否出现“H”或“k” 从模板生成:

NSString *fmt = [NSDateFormatter dateFormatFromTemplate:@"jm" options:0 locale:[NSLocale currentLocale]];
BOOL is24HourStyle = [fmt rangeOfString:@"H"].location != NSNotFound
                  || [fmt rangeOfString:@"k"].location != NSNotFound;

我找不到小时格式为“k”或“K”的语言环境,但是例如在结束 locale,“jm”扩展为“H.mm”,因此检查“HH”是不正确的。