2009-07-09 42 views
12

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

我可以很容易地覆盖使用

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

格式化但现在的日期是在我的EN-NZ格式如下午12:01周三7月7日因此,我已完全杀死了区域周边的任何其他用户世界。

我想说。

给我这个 用户所在地区是正确本地化的日期,但省略了多年 组件。

由于日期显示为字符串,所以我很想试试日期,然后通过从字符串中删除这个字段来删除年份。

回答

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"的出现位置,以防止最终出现一些时髦的额外空格或逗号。

+0

希望你不介意,但我还是把第一次添加的行设置一个日期样式的自由 - 如果你不设置日期风格的日期格式返回任何内容(如果没有dateStyle或dateF,它也不会将日期格式化为字符串ormat set)。 我即将发布相同的响应,但你秒打我! – 2009-07-09 05:46:14

+0

真棒回答。我从来没有想过这样做。谢谢你的回答,如果你问我,这很好。 – 2009-07-09 07:01:11

+0

这对于亚洲语言来说看起来效果不错。 – 2009-12-15 04:55:38

10

以上答案的问题是@"y,"@" y"都是与本地化有关。我只是在计算机上将日期和时间格式设置为日语,韩语和其他一些格式。你会发现有时候,一年中会用当地语言中的符号表示,或者有时会使用一段时间,或者其他一些可能性。因此,如果您希望保持正确的本地化依赖性,则需要搜索并替换所有这些可能性。

有一种方法+dateFormatFromTemplate:options:locale:它可以帮助,虽然它不采用日期或时间的风格,所以它不那么灵活。

我不确定有来自Apple的其他API的良好解决方案。但即便如此,他们还不清楚他们是否将自己的本地化分解为组件。没有这个,这实际上是一个不可能完成的任务。

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 
相关问题