NSDateFormatter时间根据手机设置不变

时间:2014-04-01 10:25:27

标签: ios iphone objective-c nsdateformatter

这个是杀了我,我有以下日期格式化程序:

+ (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

现在好了#34;杀了我"部分,如果我设置手机的区域格式'这似乎很有效。美国' 如果我切换" 24小时时间"开/关日期确实从19:41更改为7:41 PM

但如果我设置了“地区格式”'与美国'等不同的东西,例如'西班牙'然后我总是得到7:41 pm无论我是否改变了" 24小时时间"开关。

更奇怪的是,如果我使用以下模板:

@"HH:mm a" (changed hh to uppercase HH)

现在'西班牙'效果很好,根据" 24小时制"设置,但现在美国'总是24小时格式,无论我在设置中关闭它!

这是怎么回事?!

请注意,使用dateFormatFromTemplate而不是常规格式对我来说很重要。

1 个答案:

答案 0 :(得分:0)

试试此代码

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;
}