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

Issue with NSDateFormatter, while NSDate from string with time only

我在使用 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 小时时钟设置的情况下它工作正常。

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

将格式化程序的语言环境明确设置为 en_US_POSIX

formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];

将格式化程序语言环境设置为:

formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];

但是,请注意,这将强制 a 进行英语本地化 "AM"/"PM"。许多语言(包括我的语言)不使用后缀来表示 "AM"/"PM"。

这是一个相当烦人的错误,但如果您关心本地化,则应尊重用户设置,不要强制使用 12 小时和 24 小时时间。

理想情况下,您应该只设置格式化程序的样式并让它使用系统设置:

dateFormatter.dateStyle = NSDateFormatterNoStyle;
dateFormatter.timeStyle = NSDateFormatterShortStyle