NSDateFormatter 没有显示完整的月份名称,只有一位数字

Posted

技术标签:

【中文标题】NSDateFormatter 没有显示完整的月份名称,只有一位数字【英文标题】:NSDateFormatter not showing full month name, only single digit number 【发布时间】:2012-08-24 19:32:20 【问题描述】:

不确定是什么问题,但我得到的不是月份名称“七月”,而是“07”。

dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setLocale:[NSLocale systemLocale]];
[dateFormat setTimeZone:[NSTimeZone localTimeZone]];    
[dateFormat setDateFormat:@"MMMM dd, h:mm a"];

我尝试过 M、MM、MMM、MMMM,它们都给了我一个数字,而不是月份名称,尽管前导 0 的数量不同。

【问题讨论】:

我认为这行是问题.. [dateFormat setLocale:[NSLocale systemLocale]];不知道您使用systemLocale 的目的是什么,但您可以尝试使用currentLocale 而不是systemLocale 【参考方案1】:

原来是第二行 setLocale 的问题。我假设当手动设置locale 时系统不会默认使用英文月份名称?我住在讲英语的locale,但也许没关系。

无论如何,不​​设置区域设置可以解决月份名称问题。

dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setTimeZone:[NSTimeZone localTimeZone]];    
[dateFormat setDateFormat:@"MMMM dd, h:mm a"];

【讨论】:

【参考方案2】:

问题在于语言环境,而不是格式。看看这个:

http://waracle.net/mobile/iphone-nsdateformatter-date-formatting-table/

基本上,“MMMM”将为您提供月份的全名。

【讨论】:

【参考方案3】:

-systemLocale 不是你想要的。如果没有其他语言环境适合,它会返回一个备用语言环境。使用-currentLocale 获取用户当前的语言环境。

还有: 您应该使用NSDateFormatter+dateFormatFromTemplate:options:locale: 方法来获取正确的日期格式。在某些语言中,日期在月份之前,等等,反之亦然。

【讨论】:

以上是关于NSDateFormatter 没有显示完整的月份名称,只有一位数字的主要内容,如果未能解决你的问题,请参考以下文章

关于NSDateFormatter的格式

使用 NSDateFormatter 格式化月份和年份返回无效日期

NSDateFormatter 无法解析德语月份 March/June/Jul 的三个字母缩写

NSDateFormatter 无法解析德语月份 March/June/Jul 的三个字母缩写

iOS开发中的NSDateFormatter日期格式解析总结

如何根据语言环境仅显示日期的日期和月份?