1

NSDateFormatter 是否有一个日期格式字符串可以检测基于 12 或 24 和 1 或 0 的小时格式?

除非我读错了,否则 Unicode 规范说可以为此使用“j”。例如,以下应该使用 1-12、0-23 或 1-24 小时,具体取决于语言环境,但 NSDateFormatter 只会创建一个空字符串。

NSDateFormatter *minuteFormatter = [[NSDateFormatter alloc] init];
minuteFormatter.locale = [NSLocale currentLocale];
minuteFormatter.dateFormat = @"jj";

我看到很多建议使用以下内容来正确解释用户的语言环境,但我只想要一个包含小时的字符串,而不必解析结果字符串。

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateStyle:NSDateFormatterNoStyle];
[dateFormatter setTimeStyle:NSDateFormatterLongStyle];
4

1 回答 1

4

日期格式规范

这是一个特殊用途的符号。它不得出现在模式或骨架数据中。相反,它保留用于传递给执行灵活日期模式生成的 API 的骨架中。在这种情况下,它会请求区域设置的首选小时格式(h、H、K 或 k),这取决于是否在区域设置的标准短时间格式中使用了 h、H、K 或 k。在此类 API 的实现中,在开始与 availableFormats 数据进行匹配之前,必须将“j”替换为 h、H、K 或 k。请注意,在传递给 API 的框架中使用“j”是让框架请求区域设置的首选时间周期类型(12 小时或 24 小时)的唯一方法。

这可能意味着它需要在进入日期格式之前解决。

尝试使用+ (NSString *)dateFormatFromTemplate:(NSString *)template options:(NSUInteger)opts locale:(NSLocale *)locale来检索格式字符串。

NSString *format = [NSDate dateFormatFromTemplate:@"jj" options:0 locale: myLocale];
hourFormatter.dateFormat = format;
于 2013-04-11T21:29:25.227 回答