我正面临NSDateFormatter
的有线问题。
以下是我的代码:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"hh:mma"];
NSString *currentHours = [formatter stringFromDate:[NSDate date]];
NSLog(@"Hours: %@", currentHours);
如果设备设置设置为在12小时内显示时间(即AM& PM),则输出为:
Hours: 12:40PM
如果设备设置设置为在24小时输出中显示时间为:
Hours: 12:41
这也影响了我的其他代码。
NSDate *open = [formatter dateFromString:@"08:00am"];
NSDate *close = [formatter dateFromString:@"05:00"];
如果设备设置设置为在24小时内显示时间,则两个日期对象均为nil
。在12小时的时钟设置其工作正常。
如果有人有解决方案,请告诉我。
答案 0 :(得分:4)
将格式化程序区域设置设置为:
formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
但请注意,这会强制a
英文本地化“AM”/“PM”。许多语言(包括我的)不使用后缀来表示“AM”/“PM”。
这是一个相当恼人的错误,但如果你关心本地化,你应该尊重用户设置,不要强迫12h对24h时间。
理想情况下,您应该只设置格式化程序的样式并让它使用系统设置:
dateFormatter.dateStyle = NSDateFormatterNoStyle;
dateFormatter.timeStyle = NSDateFormatterShortStyle
答案 1 :(得分:2)
将格式化程序的语言环境明确设置为en_US_POSIX
formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];