NSDateFormatter使用自定义格式的相对日期格式

use*_*469 12 objective-c relative-date nsdateformatter

所以我的意图是发布如下所示的日期:

Today, August 28
Tomorrow, August 29
Friday, August 30
...etc
Run Code Online (Sandbox Code Playgroud)

问题是,我似乎只能如此接近.

当我setDoesRelativeDateFormatting:YESsetDateStyleFullsetTimeStyleNone,它产生这样的结果:

Today
Tomorrow
Friday, August 30, 2013
Run Code Online (Sandbox Code Playgroud)

这产生了一年,并没有产生今天和明天的月份和日期.

我试过的其他代码是这样的:

[NSDateFormatter dateFormatFromTemplate:@"eeeedMMM" options:0
                                                     locale:[NSLocale currentLocale]];
Run Code Online (Sandbox Code Playgroud)

这产生以下结果:

Wednesday, August 28
Thursday, August 29
Friday, August 30
Run Code Online (Sandbox Code Playgroud)

看起来,dateStyle和timeStyle或相对日期格式会覆盖自定义格式.

有没有办法在不进入自定义实现的情况下完成此日期格式?

提前致谢!

小智 3

根据有关 NSDateFormatter 的文档,我认为解决您问题的唯一解决方案是为您想要相对显示的日期提供两个日期字符串。您应该记住,在不同的语言中,相对日期存在差异。从文档中:

\n\n
\n

如果日期格式化程序使用相对日期格式,则在可能的情况下,它会用短语 \xe2\x80\x94 替换其输出的日期部分,例如 \xe2\x80\x9ctoday\xe2\x80\x9d 或 \xe2\x80\x9ctomorrow\xe2 \x80\x9d\xe2\x80\x94 表示相对日期。可用的短语取决于日期格式化程序的区域设置;而对于未来的日期,英语可能只允许 \xe2\x80\x9c 明天,\xe2\x80\x9d 法语可能允许 \xe2\x80\x9c 后天后天”。

\n
\n\n

我相信,如果您定义要相对地显示例如昨天、今天和明天,您可以使用 2 个 NSDateFormatters。对于第一个,您将显示相对值,对于第二个,您将显示实际日期。对于非相对日期,您将仅显示非相对值。

\n