【问题标题】:Locale Sensitive dateFormat String区域设置敏感的 dateFormat 字符串
【发布时间】:2013-01-30 17:44:00
【问题描述】:

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];

【问题讨论】:

  • 实际上,在大多数情况下,日期格式化程序会自动切换,覆盖格式化字符串。最新的 Unicode 规范难以辨认。
  • 我可以选择 hh 或 HH 以及其他一些选项。 hh 打印 1-12,HH 打印 0 - 24,两者都与语言环境无关。您是说 NSDateFormatter 会覆盖这些设置吗?
  • 在某些情况下,是的,iOS 会忽略该格式。
  • 我仔细研究了一下。只有在设置中的 12/24 开关被 iOS 覆盖(忽略)格式的情况下。但是,阅读规范,我无法理解“j”应该是什么意思。

标签: ios nsdateformatter


【解决方案1】:

来自date format specs

这是一个特殊用途的符号。它不得出现在模式或骨架数据中。相反,它保留用于传递给执行灵活日期模式生成的 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;

【讨论】:

  • 我猜你的意思是模板字符串中的jj
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-27
  • 2020-07-15
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 2014-05-08
相关资源
最近更新 更多