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

时间:2015-01-27 16:34:56

标签: ios objective-c iphone nsdateformatter date-formatting

我在ios中使用以下代码获取系统时间格式。当我目前的地区设置为" United State"但当我改变地区的时候,#34; United State"到#34;英国"它总是给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;
    }

}

记录"美国"区域::

  

2015-01-27 11:32:16.090 [350:60b] 12 Formate :: 0
      2015-01-27 11:32:16.585 [350:60b]连接
      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]连接
      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]地点更新......

1 个答案:

答案 0 :(得分:8)

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

这使用名为" j"的特殊日期模板字符串。根据{{​​3}}," j" ...

  

请求区域设置的首选小时格式(h,H,K或k),由h,H,K或k是否以区域设置的标准短时间格式使用来确定。在实施这样的API时,' j'在开始匹配availableFormats数据之前,必须用h,H,K或k替换。请注意使用' j'在传递给API的骨架中,唯一的方法是让骨架请求区域设置的首选时间周期类型(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;
    }

}

我从以下链接ICU Spec找到了此解决方案。