NSDateFormatter问题,而来自字符串的NSDate仅限时间

时间:2017-02-10 10:44:31

标签: ios objective-c nsdate nsdateformatter

我正面临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小时的时钟设置其工作正常。

如果有人有解决方案,请告诉我。

2 个答案:

答案 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"];