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
我在使用 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