区域设置敏感日期格式字符串

时间:2013-01-30 17:44:00

标签: ios nsdateformatter

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

1 个答案:

答案 0 :(得分:3)

来自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;