这是一个有点棘手的问题。我在iPhone上使用NSDateFormatter,但我想只显示没有年份组件的标准日期。但请保留用户区域设置格式的日期。
我可以使用
轻松覆盖格式[dateFormatter setDateFormat:@"h:mma EEEE MMMM d"]; // hurl.ws/43p9 (date formatting)
但是现在日期是我的en-nz格式,例如7月7日星期三下午12:01。所以我完全杀死了世界上任何其他用户的语言环境。
我想说。
为我提供正确的本地化日期 用户区域但省略了年份 成分
由于日期显示为字符串,因此我很想将日期归结为日期,然后通过将其从字符串中删除来删除年份组件。
答案 0 :(得分:16)
从iOS 4.0开始,正确的方法(参见WWDC 2012的本地化会话),支持开箱即用的不同语言环境变体,正在使用如上所述的以下API
+dateFormatFromTemplate:options:locale:
例如,要获得没有年份的长日期格式:
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
NSString *longFormatWithoutYear = [NSDateFormatter dateFormatFromTemplate:@"MMMM d" options:0 locale:[NSLocale currentLocale]];
[dateFormatter setDateFormat:longFormatWithoutYear];
//format your date...
//output will change according to locale. E.g. "July 9" in US or "9 de julho" in Portuguese
答案 1 :(得分:11)
您可以尝试以下方式:
//create a date formatter with standard locale, then:
// have to set a date style before dateFormat will give you a string back
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
// read out the format string
NSString *format = [dateFormatter dateFormat];
format = [format stringByReplacingOccurrencesOfString:@"y" withString:@""];
[dateFormatter setDateFormat:format];
有点黑客,但它应该有用。
编辑:您可能希望首先删除字符串@"y,"
和@" y"
的出现,以防您最终得到一些时髦的额外空格或逗号。
答案 2 :(得分:10)
上面答案的问题是@"y,"
和@" y"
都取决于本地化。我刚刚在计算机上将日期和时间格式设置为日语,韩语和其他一些格式。您会发现有时候年份用当地语言的符号表示,或者有时使用句号,或者其他一些可能性。因此,如果您希望保持正确的本地化依赖性,那么您还需要搜索并替换所有这些可能性。
有一种类方法+dateFormatFromTemplate:options:locale:
可能有所帮助,虽然它没有采用日期或时间风格,因此它不够灵活。
我不确定是否有来自Apple的其他API的良好解决方案。但即便如此,也不清楚他们将自己的本地化分离成组件。没有这个,这基本上是一项不可能完成的任务。