我希望以“人性化的方式”显示NSDates,例如“上周”或“几天前”。与Pretty Time for Java类似的东西。
最好的方法是什么,继承NSDateFormatter?在我重新发明轮子之前,是否已经有了一些库?
答案 0 :(得分:40)
在iOS 4及更高版本中,使用doesRelativeDateFormatting属性:
NSDateFormatter *dateFormatter = ...;
dateFormatter.doesRelativeDateFormatting = YES;
答案 1 :(得分:7)
Three20的NSDateAdditions:
https://github.com/pbo/three20/blob/master/src/Three20Core/Sources/NSDateAdditions.m
..也允许你这样做。
编辑:2013年,你真的不想再使用Three20了。使用Regexident的解决方案。
答案 2 :(得分:5)
Xcode中人类可读日期的完整代码段:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
NSLocale *locale = [NSLocale currentLocale];
[dateFormatter setLocale:locale];
[dateFormatter setDoesRelativeDateFormatting:YES];
答案 3 :(得分:4)
这是Swift 2中的解决方案:
func formattedHumanReadable(date: NSDate) -> String {
let formatter = NSDateFormatter()
formatter.timeStyle = .NoStyle
formatter.dateStyle = .ShortStyle
formatter.doesRelativeDateFormatting = true
let locale = NSLocale.currentLocale()
formatter.locale = locale
return formatter.stringFromDate(date)
}
答案 4 :(得分:1)
答案 5 :(得分:0)
使用DateTools(github / Cocoapods)timeAgoSinceNow
功能。这是一些示例输出...
NSDate.init(timeIntervalSinceNow:-3600).timeAgoSinceNow() "An hour ago"
NSDate.init(timeIntervalSinceNow:-3600*24).timeAgoSinceNow() "Yesterday"
NSDate.init(timeIntervalSinceNow:-3600*24*6).timeAgoSinceNow() "6 days ago"
NSDate.init(timeIntervalSinceNow:-3600*24*7*3).timeAgoSinceNow() "3 weeks ago"
NSDate.init(timeIntervalSinceNow:-3600*24*31*3).timeAgoSinceNow() "3 months ago"
timeAgoSinceDate
功能也很方便。
DateTools支持许多(人类)语言,并提供比NSDateFormatter
有限doesRelativeDateFormatting
更好的相对描述。