【发布时间】: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] 位置更新...
【问题讨论】:
-
有很多与此相关的问题。它归结为gotcha listed about The returned string may not contain exactly those components given in template, but may—for example—have locale-specific adjustments applied.。如果您想保证格式化程序的正确结果,请使用语言环境
en_US_POSIX -
@Petesh 使用
en_US_POSIX违背了使用dateFormatFromTemplate方法的目的。 -
@Petesh 在这种情况下,我不这么认为。我刚刚测试了这段代码。无论 24 小时时间设置如何,我都会得到
h a作为两种语言环境的结果格式。我的结果似乎不正确,并且与 OP 报告的不符。 -
嗨@Petesh我也面临这个问题任何想法。我该如何解决这个问题?您能否为该问题放置一些代码 sn-p 或任何有用的链接。谢谢。
-
@chiragshah,如果你总是想要 24 小时制,那你为什么要使用 NSString *strDateFormate = @"hh a";相反,我认为你应该使用 NSString *strDateFormate = @"HH a";。希望这可能会有所帮助。参考->unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns
标签: ios objective-c iphone nsdateformatter date-formatting