【问题标题】:How to get system time format when region is "United Kingdom" in ios?ios中地区为“英国”时如何获取系统时间格式?
【发布时间】:2015-01-27 16:34:55
【问题描述】:

我正在使用以下代码在 ios 中获取系统时间格式。当我当前的区域设置为“美国”时它工作正常,但是当我将区域从“美国”更改为“英国”时,它总是给出 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 甲酸 :: 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 甲酸 :: 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] 位置更新...

【问题讨论】:

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


【解决方案1】:

在这个话题上经过大量的研发后,我终于找到了这个问题的解决方案。

这使用称为“j”的特殊日期模板字符串。根据ICU Spec,“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;
    }

}

我从以下链接How can I determine if iPhone is set for 12 hour or 24 hour time display?找到了这个解决方案。

【讨论】:

    【解决方案2】:

    您基本上是在尝试检测使用的是 12h 还是 24h 格式,对吗?如果是这样,请尝试:

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setLocale:[NSLocale currentLocale]];
    [formatter setDateStyle:NSDateFormatterNoStyle];
    [formatter setTimeStyle:NSDateFormatterShortStyle];
    NSString *dateString = [formatter stringFromDate:[NSDate date]];
    NSRange amRange = [dateString rangeOfString:[formatter AMSymbol]];
    NSRange pmRange = [dateString rangeOfString:[formatter PMSymbol]];
    BOOL is24h = (amRange.location == NSNotFound && pmRange.location == NSNotFound);
    [formatter release];
    NSLog(@"%@\n",(is24h ? @"YES" : @"NO"));
    

    来源:Detect if time format is in 12hr or 24hr format

    【讨论】:

    • 如果您尝试在英国更改格式,然后将格式 12 更改为 24。那么这不起作用
    猜你喜欢
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    相关资源
    最近更新 更多