我正在使用以下代码在 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 Formate :: 0
2015-01-27 11:32:16.585 [350:60b] Connect
2015-01-27 11:32:16.591 [350:60b] Loction update...
2015-01-27 11:32:16.604 [350:60b] Loction update...
2015-01-27 11:32:16.622 [350:60b] Loction update...
“英国”地区的日志::
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] Loction update...
2015-01-27 11:33:36.806 [364:60b] Loction update...
2015-01-27 11:33:36.832 [364:60b] Loction update...
最佳答案
经过对这个主题的大量研发,我终于找到了这个问题的解决方案。
这使用了一个名为“j”的特殊日期模板字符串。根据ICU Spec , "j"...
Requests the preferred hour format for the locale (h, H, K, or k), as determined by whether h, H, K, or k is used in the standard short time format for the locale. In the implementation of such an API, 'j' must be replaced by h, H, K, or k before beginning a match against availableFormats data. Note that use of 'j' in a skeleton passed to an API is the only way to have a skeleton request a locale's preferred time cycle type (12-hour or 24-hour). That last sentence is important. It "is the only way to have a skeleton request a locale's preferred time cycle type". Since NSDateFormatter and NSCalendar are built on the ICU library, the same holds true here.
所以我更改了代码中的模板值
#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? .
关于ios - ios中区域为 "United Kingdom"时如何获取系统时间格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28175368/