iOS 上的 NSDate 提供人类友好的日期描述
我想以“人性化的方式”显示 NSDate,例如“上周”或“几天前”。类似于 Java 的美好时光。
子类化 NSDateFormatter 的最佳方法是什么?在我重新发明轮子之前,是否已经有一些库可以做到这一点?
I want to display NSDates in a "human-friendly way", such as "last week", or "a few days ago". Something similar to Pretty Time for Java.
What's the best way to do this, subclassing NSDateFormatter? Before I go and reinvent the wheel, is there already some library for this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
在 iOS 4 及更高版本上,使用 doesRelativeDateFormatting 属性:
On iOS 4 and later, use the doesRelativeDateFormatting property:
Three20 的 NSDateAdditions:
https://github.com/pbo/ Three20/blob/master/src/Three20Core/Sources/NSDateAdditions.m
.. 也允许您这样做。
编辑:2013 年,您真的不想再使用 Three20。使用 Regexident 的解决方案。
Three20's NSDateAdditions:
https://github.com/pbo/three20/blob/master/src/Three20Core/Sources/NSDateAdditions.m
.. allows you to do that as well.
EDIT: In 2013, you really don't want to use Three20 anymore. Use Regexident's solution.
Xcode 中人类可读日期的完整代码片段:
Full code snippet for human readable dates in Xcode:
这是 Swift 2 中的解决方案:
This is the solution in Swift 2:
一个好的日期格式化程序是 YLMoment,它基于流行的 moment.js。
它确实格式化了很好的相对时间。
A good date formatter is YLMoment, which is based on the popular moment.js.
It does format nice relative times.
使用 DateTools (github/Cocoapods)
timeAgoSinceNow
函数。这是一些示例输出...NSDate.init(timeIntervalSinceNow:-3600).timeAgoSinceNow() “一小时前”
NSDate.init(timeIntervalSinceNow:-3600*24).timeAgoSinceNow() "昨天"
NSDate.init(timeIntervalSinceNow:-3600*24*6).timeAgoSinceNow() "6 天前"
NSDate.init(timeIntervalSinceNow:-3600*24*7*3).timeAgoSinceNow() "3周前"
NSDate.init(timeIntervalSinceNow:-3600*24*31*3).timeAgoSinceNow() "3 个月前"
timeAgoSinceDate
函数也很方便。DateTools 支持许多(人类)语言,并且比
NSDateFormatter
的有限的doesRelativeDateFormatting
提供更好的相对描述。Use the DateTools (github/Cocoapods)
timeAgoSinceNow
function. Here's some sample output...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"
The
timeAgoSinceDate
function is also handy.DateTools supports many (human) languages and gives much better relative descriptions than
NSDateFormatter
's somewhat limiteddoesRelativeDateFormatting
.