当ios中的地区是"英国"时,如何获得系统时间格式?

chi*_*hah 14 iphone objective-c nsdateformatter date-formatting ios

我在ios中使用以下代码获取系统时间格式.当我目前的地区设置为"United State"时它工作正常,但是当我将该地区从"United State"改为"United Kingdom"时,它总是给出12小时的合成.

#pragma mark
#pragma mark - get system time
-(BOOL)getSystemTimeFormat
{
    NSString *strDateFormate = @"hh a";
    NSString *dateFormat = [NSDateFormatter dateFormatFromTemplate:strDateFormate options:0 locale:[NSLocale currentLocale]];
    if ([dateFormat rangeOfString:@"h"].location != NSNotFound)
    {
        [kNSUserDefaults setBool:YES forKey:@"TimeFormat"];
        [kNSUserDefaults synchronize];
        return YES;
    }
    else
    {
        [kNSUserDefaults setBool:NO forKey:@"TimeFormat"];
        [kNSUserDefaults synchronize];
        return NO;
    }

}
Run Code Online (Sandbox Code Playgroud)

"美国"地区的日志::

2015-01-27 11:32:16.090 [350:60b] 12 Formate :: 0
2015-01-27 11:32:16.585 [350:60b] Connect
2015-01-27 11:32:16.591 [350:60b ]位置更新...
2015-01-27 11:32:16.604 [350:60b]位置更新...
2015-01-27 11:32:16.622 [350:60b]位置更新...

"英国"地区的日志::

2015-01-27 11:33:35.785 [364:60b] 12 Formate :: 1
2015-01-27 11:33:36.777 [364:60b] Connect
2015-01-27 11:33:36.780 [364:60b ]位置更新...
2015-01-27 11:33:36.806 [364:60b]位置更新...
2015-01-27 11:33:36.832 [364:60b]位置更新...

chi*_*hah 8

经过这个主题的大量研发,我终于找到了解决这个问题的方法.

这使用名为"j"的特殊日期模板字符串.根据ICU规范,"j"......

请求区域设置(h,H,K或k)的首选小时格式,由h,H,K或k是否以区域设置的标准短时间格式使用来确定.在这种API的实现中,在开始与availableFormats数据匹配之前,'j'必须被h,H,K或k替换.请注意,在传递给API的框架中使用"j"是使框架请求区域设置的首选时间周期类型(12小时或24小时)的唯一方法.最后一句很重要.它"是骨架请求区域设置首选时间周期类型的唯一方法".由于NSDateFormatter和NSCalendar构建在ICU库上,因此这同样适用.

所以我在我的代码中更改了模板值

#pragma mark
#pragma mark - get system time
-(BOOL)getSystemTimeFormat
{
    NSString *strDateFormate = @"j";
    NSString *dateFormat = [NSDateFormatter dateFormatFromTemplate:strDateFormate options:0 locale:[NSLocale currentLocale]];
    if ([dateFormat rangeOfString:@"a"].location != NSNotFound)
    {
        [kNSUserDefaults setBool:YES forKey:@"TimeFormat"];
        [kNSUserDefaults synchronize];
        return YES;
    }
    else
    {
        [kNSUserDefaults setBool:NO forKey:@"TimeFormat"];
        [kNSUserDefaults synchronize];
        return NO;
    }

}
Run Code Online (Sandbox Code Playgroud)

我从以下链接中找到了此解决方案如何确定iPhone是否设置为12小时或24小时时间显示?.