在iPhone上使用NSDateFormatter,保护现场,但失去日期组件(Using NSDat

2019-07-29 21:51发布

这是一个稍微棘手的问题。 我使用NSDateFormatter iPhone上,但我想只显示一个标准的日期没有年组件。 但保留用户区域设置格式化的日期。

我可以很容易地使用覆盖格式

[dateFormatter setDateFormat:@"h:mma EEEE MMMM d"];  // hurl.ws/43p9 (date formatting)

但现在的日期是在我的EN-NZ格式如下午12:01周三7月7日因此,我已完全杀死的语言环境,为世界各地的其他用户。

我想说的。

给我这个用​​户区域的正确本地化的日期,但省略了多年的成分。

由于日期显示为字符串,我很想只是fromat日期,然后通过不仅仅是削减了这一点字符串除去一年的组成部分。

Answer 1:

你可以尝试这样的:

//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"第一,如果你结束了一些时髦的额外的空格或逗号。



Answer 2:

距离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


Answer 3:

以上回答的问题是, @"y,"@" y"都是本地化依赖。 我只是打得四处设置日期和时间格式我的电脑,以日本,韩国和其他一些格式上。 你会发现,有时一年由符号用当地语言,或有时使用期限,或许多其他的可能性。 所以,你需要搜索和替换所有这些可能性为好,如果你希望保持正确定位的依赖。

还有一类方法+dateFormatFromTemplate:options:locale:这可能会有帮助,但它并不需要日期或时间的风格,所以它不是那么灵活。

我不知道有从苹果额外的API一个很好的解决方案。 但即使如此,目前还不清楚他们有自己的本地化分离到的组件。 如果没有指出,这基本上是不可能完成的任务。



文章来源: Using NSDateFormatter on the iPhone, protect locale but lose date components