如何解决在iOS上使用NSDate的人类友好的日期描述
| 我想以“人类友好的方式”显示NSDates,例如“上周”或“几天前”。与Java的Pretty Time类似。 子类化NSDateFormatter的最佳方法是什么?在我重新发明轮子之前,已经有一些图书馆了吗?解决方法
这是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)
}
, 在iOS 4和更高版本上,使用dosRelativeDateFormatting属性:
NSDateFormatter *dateFormatter = ...;
dateFormatter.doesRelativeDateFormatting = YES;
, Three20的NSDateAdditions:
https://github.com/pbo/three20/blob/master/src/Three20Core/Sources/NSDateAdditions.m
..允许您也这样做。
编辑:2013年,您确实不想再使用Three20。使用Regexident的解决方案。
, Xcode中人类可读日期的完整代码段:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
NSLocale *locale = [NSLocale currentLocale];
[dateFormatter setLocale:locale];
[dateFormatter setDoesRelativeDateFormatting:YES];
, YLMoment是一个很好的日期格式化程序,它基于流行的moment.js。
它确实格式化了很好的相对时间。
, 使用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
提供了更好的相对描述。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。