这是一个稍微棘手的问题。 我使用NSDateFormatter iPhone上,但我想只显示一个标准的日期没有年组件。 但保留用户区域设置格式化的日期。
我可以很容易地使用覆盖格式
[dateFormatter setDateFormat:@"h:mma EEEE MMMM d"]; // hurl.ws/43p9 (date formatting)
但现在的日期是在我的EN-NZ格式如下午12:01周三7月7日因此,我已完全杀死的语言环境,为世界各地的其他用户。
我想说的。
给我这个用户区域的正确本地化的日期,但省略了多年的成分。
由于日期显示为字符串,我很想只是fromat日期,然后通过不仅仅是削减了这一点字符串除去一年的组成部分。
你可以尝试这样的:
//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"
第一,如果你结束了一些时髦的额外的空格或逗号。
距离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
以上回答的问题是, @"y,"
并@" y"
都是本地化依赖。 我只是打得四处设置日期和时间格式我的电脑,以日本,韩国和其他一些格式上。 你会发现,有时一年由符号用当地语言,或有时使用期限,或许多其他的可能性。 所以,你需要搜索和替换所有这些可能性为好,如果你希望保持正确定位的依赖。
还有一类方法+dateFormatFromTemplate:options:locale:
这可能会有帮助,但它并不需要日期或时间的风格,所以它不是那么灵活。
我不知道有从苹果额外的API一个很好的解决方案。 但即使如此,目前还不清楚他们有自己的本地化分离到的组件。 如果没有指出,这基本上是不可能完成的任务。
文章来源: Using NSDateFormatter on the iPhone, protect locale but lose date components