iOS 上的 NSDate 提供人类友好的日期描述

发布于 2024-11-15 08:10:49 字数 166 浏览 5 评论 0原文

我想以“人性化的方式”显示 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

肤浅与狂妄 2024-11-22 08:10:49

在 iOS 4 及更高版本上,使用 doesRelativeDateFormatting 属性:

NSDateFormatter *dateFormatter = ...;
dateFormatter.doesRelativeDateFormatting = YES;

On iOS 4 and later, use the doesRelativeDateFormatting property:

NSDateFormatter *dateFormatter = ...;
dateFormatter.doesRelativeDateFormatting = YES;
爱要勇敢去追 2024-11-22 08:10:49

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.

╄→承喏 2024-11-22 08:10:49

Xcode 中人类可读日期的完整代码片段:

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setTimeStyle:NSDateFormatterNoStyle];
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle];

    NSLocale *locale = [NSLocale currentLocale];
    [dateFormatter setLocale:locale];

    [dateFormatter setDoesRelativeDateFormatting:YES];

Full code snippet for human readable dates in Xcode:

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setTimeStyle:NSDateFormatterNoStyle];
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle];

    NSLocale *locale = [NSLocale currentLocale];
    [dateFormatter setLocale:locale];

    [dateFormatter setDoesRelativeDateFormatting:YES];
稚气少女 2024-11-22 08:10:49

这是 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)
  }

This is the solution in 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)
  }
潜移默化 2024-11-22 08:10:49

一个好的日期格式化程序是 YLMoment,它基于流行的 moment.js

它确实格式化了很好的相对时间。

A good date formatter is YLMoment, which is based on the popular moment.js.

It does format nice relative times.

笙痞 2024-11-22 08:10:49

使用 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 limited doesRelativeDateFormatting.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文