java - 在 Android 中以自定义格式显示相对日期

标签 java android android-dateutils

我想将日期转换为人类可读的格式。我正在使用 DateUtils. getRelativeDateTimeString ,但这不符合标准。我得到的输出看起来像:1 小时 15 分钟。以前等

我想知道是否可以将格式更改为:

3m 而不是 3 分钟。以前

1h 而不是 1 小时。 15 分钟以前

使用 DateUtils 还是有其他方法可以做到这一点?

更准确地说,我正在寻找与此 angular-filter 等效的 Android您可以轻松更改相对日期的格式(例如:{{minutes}} 分钟前{{minutes}}m

为了让自己清楚,我不是在寻找一种格式化日期的方法,而是将日期转换为人类可读的格式,例如“今天”、“1 小时”、“38 分钟”(类似于 facebook 的相对日期).

最佳答案

经过一番研究,我发现了一些库,例如 Time4A , Joda-Time , PrettyTime , Android-Ago .

但是,我决定不使用库并覆盖其文本资源,而是创建一个方法并将文本存储在 strings.xml 中,以备将来可能的本地化之用。

    private static final int SECOND_MILLIS = 1000;
    private static final int MINUTE_MILLIS = 60 * SECOND_MILLIS;
    private static final int HOUR_MILLIS = 60 * MINUTE_MILLIS;
    private static final int DAY_MILLIS = 24 * HOUR_MILLIS;
    private static final int WEEK_MILLIS = 7 * DAY_MILLIS;

    public static String getTimeAgo(Date date, Context context) {
        Date now = Calendar.getInstance().getTime();
        final long diff = now.getTime() - date.getTime();

        if (diff < SECOND_MILLIS) {
            return context.getString(R.string.just_now);
        } else if (diff < MINUTE_MILLIS) {
            return diff / SECOND_MILLIS + context.getString(R.string.seconds_ago);
        } else if (diff < 2 * MINUTE_MILLIS) {
            return context.getString(R.string.a_minute_ago);
        } else if (diff < 59 * MINUTE_MILLIS) {
            return diff / MINUTE_MILLIS + context.getString(R.string.minutes_ago);
        } else if (diff < 90 * MINUTE_MILLIS) {
            return context.getString(R.string.an_hour_ago);
        } else if (diff < 24 * HOUR_MILLIS) {
            return diff / HOUR_MILLIS + context.getString(R.string.hours_ago);
        } else if (diff < 48 * HOUR_MILLIS) {
            return context.getString(R.string.yesterday);
        } else if (diff < 6 * DAY_MILLIS) {
            return diff / DAY_MILLIS + context.getString(R.string.days_ago);
        } else if (diff < 11 * DAY_MILLIS) {
            return context.getString(R.string.a_week_ago);
        } else {
            return diff / WEEK_MILLIS + context.getString(R.string.weeks_ago);
        }
    }

关于java - 在 Android 中以自定义格式显示相对日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42253893/

相关文章:

java - 获取带有玻璃的 GWT PopupPanel 淡入淡出

java - 当多个键盘连接到 USB 端口时,向指定的 USB 键盘发送消息

java - 如何在java中设置mp3文件的专辑封面

android - Android 和 iOS 上的 HTML5 音频有哪些限制?

php - 无法显示 SELECT 结果 sql

java - 将 Parse.com 中的日期设置为与系统日期相同的类型

java - 如何从android中的文件资源管理器获取唯一路径

android - 所有 com.android.support 库必须使用完全相同的版本规范

java - 如何增加 getRelativeDateTimeString 方法的耗时,以及如何增加正常日期的月份名称

Android如何将这种格式(/Date(1418346257000+0700)/)转换为Date对象