NSDateFormatter的时间不会根据手机设置而改变
这一个是杀了我,我有以下date格式化程序:
+ (NSDateFormatter *)dateFormatter { static NSDateFormatter *_dateFormatter = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ NSString *format = [NSDateFormatter dateFormatFromTemplate:@"hh:mm a" options:0 locale:[NSLocale currentLocale]]; _dateFormatter = [[NSDateFormatter alloc] init]; [_dateFormatter setDateFormat:format]; }); return _dateFormatter; }
我想根据用户时钟设置的最后一小时格式,所以如果用户使用“24小时制”,结果应该是例如:
19:41
否则结果应该是
7:41 PM
现在确定“杀死我”部分,如果将手机的“地区格式”设置为“美国”,这似乎很有用。
如果我打开/closures“24小时制”,则确实从19:41
到7:41 PM
变化
但是如果我把“地区格式”设置为与“美国”不同的地方,例如“西class牙”,那么无论我是否打开/closures“24小时制”,我总是得到7:41 pm
。
更奇怪的是,如果我使用以下模板:
@"HH:mm a" (changed hh to uppercase HH)
现在'西class牙'工作很好,根据“24小时制”的设置而改变,但是现在'美国'总是24小时制,无论我是否在设置中closures!
这里发生了什么?!
请考虑它对我使用dateFormatFromTemplate
而不是常规格式很重要。
试试这个代码
NSDate *time; if ([objShare checkTimeFormat]){ [timeFormat setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];; [timeFormat setDateFormat:@"hh:mm a"]; NSLog(@"%@",lblVtime.text); time = [timeFormat dateFromString:lblVtime.text]; } else{ NSLog(@"%@",lblVtime.text); [timeFormat setDateFormat:@"hh:mm a"]; time = [timeFormat dateFromString:lblVtime.text]; } [timeFormat setDateFormat:@"HH:mm"]; NSLog(@"%@",[timeFormat stringFromDate:time]);
让我知道你是否有任何疑问
checkTimeFormat
方法:
-(BOOL)checkTimeFormat{ 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); return is24h; }