在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
错了吗?
答案 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 pm
或19 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())
这不是一个理想的解决方案,因为我确定会有一些语言环境,其中年份在日期和月份之间格式化,这将创建一个时髦的字符串。但它适用于我所有测试过的案例。