在设置doesRelativeDateFormatting = YES时,stringFromDate返回nil

时间:2014-08-19 07:49:57

标签: ios iphone nsdateformatter

在NSDateFormatter文档中,

  

如果日期格式化程序使用相对日期格式,则在可能的情况下,它会用短语替换其输出的日期组件,例如“今天”或“明天” - 表示相对日期。

我使用以下代码:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = [NSDateFormatter dateFormatFromTemplate:@"EEEE dMMMM',' hma"
                                                       options:0
                                                        locale:[NSLocale currentLocale]];
formatter.doesRelativeDateFormatting = YES;
NSLog(@"Date: %@", [formatter stringFromDate:[NSDate date]]);

记录Date:

但是在评论formatter.doesRelativeDateFormatting = YES;时,输出结果是正确的。

Date: Tuesday, 19 August 1:18 pm

我理解doesRelativeDateFormatting错了吗?

2 个答案:

答案 0 :(得分:6)

嗨,我修改了这样的代码。它有效..

 NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
 formatter.dateFormat = [NSDateFormatter dateFormatFromTemplate:@"EEEE dMMMM',' hma"
                                                       options:0
                                                        locale:[NSLocale currentLocale]];
 [formatter setDateStyle:NSDateFormatterFullStyle];
 [formatter setTimeStyle:NSDateFormatterShortStyle];
 formatter.doesRelativeDateFormatting = YES;
  NSLog(@"Date: %@", [formatter stringFromDate:[NSDate date]]);

答案 1 :(得分:5)

似乎doesRelativeDateFormatting无法使用自定义dateFormat

我遇到了与您展示Today, 11:44 pm19 Aug, 1:23 am相同的挑战。这一年很难被排除在外。

我解决了这个问题:

获取您喜欢的任何样式的格式化日期,并启用doesRelativeDateFormatting

let dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = NSDateFormatterStyle.MediumStyle
dateFormatter.doesRelativeDateFormatting = true
var dateString = dateFormatter.stringFromDate(dateToFormat)

从同一日期获取格式化的年份(确保dateFormat具有正确的y数来表示年份。我使用4 y' s因为中日期样式使用全年格式。

let yearFormatter = NSDateFormatter()
yearFormatter.dateFormat = NSDateFormatter.dateFormatFromTemplate("yyyy", options: 0, locale: NSLocale.currentLocale())
let yearString = dateFormatter.stringFromDate(dateToFormat)

最后通过从生成的dateString中删除年份并修剪一些多余的空格来构成最终字符串。

var finalString = dateString.stringByReplacingOccurrencesOfString(yearString, withString: "")
finalString = finalString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())

这不是一个理想的解决方案,因为我确定会有一些语言环境,其中年份在日期和月份之间格式化,这将创建一个时髦的字符串。但它适用于我所有测试过的案例。