【问题标题】:Approximate Time Period with Joda-TimeJoda-Time 的大致时间段
【发布时间】:2011-07-04 19:58:15
【问题描述】:

我正在使用 Joda 库来获取自给定时间戳以来经过的时间段:

public static String getTimePassedSince(Date initialTimestamp){

        DateTime initDT = new DateTime(initialTimestamp.getTime());
        DateTime now = new DateTime();
        Period p = new Period(initDT, now);

        PeriodFormatter formatter = new PeriodFormatterBuilder()
            .appendYears().appendSuffix(" year, ", " years, ")
            .appendMonths().appendSuffix(" month, ", " months, ")
            .appendDays().appendSuffix(" day, ", " days, ")
            .appendHours().appendSuffix(" hour, ", " hours, ")
            .appendMinutes().appendSuffix(" minute, ", " minutes, ")
            .appendSeconds().appendSuffix(" second, ", " seconds")
            .printZeroNever()
            .toFormatter();

        return formatter.print(p);
    }

该函数返回给定时间戳的确切时间段字符串。例如:

3 minutes, 23 seconds
1 hour, 30 minutes, 57 seconds
1 day, 23 hours, 21 minutes, 19 seconds

有什么方法可以让我获得近似时间而不是准确时间?例如,如果距离initialTimestamp 已经过去了 1 分 30 秒,则它只返回 1.5 minutes。同样,如果过去了 1 小时 35 分钟,则返回 about 1.5 hours 而不是 1 小时 35 分钟 xy 秒。

我知道返回的字符串可以被解析和操作,但我正在寻找更复杂的东西。

【问题讨论】:

    标签: java time jodatime


    【解决方案1】:

    看看PrettyTime

    【讨论】:

      【解决方案2】:

      我认为您需要为此创建自己的格式化程序,它会查看时间段并确定要格式化的粒度,例如 63 秒“1 分钟”或 3 小时 48 分钟:“ 3小时”。在我看来,您只想报告一个最大的时间单位,而忽略更细化的时间单位。您需要定义舍入行为以及如何以天为单位呈现时间:“44 天前”或“一个月前”或“1 个月零 2 周前”。

      我不知道有任何通用实用程序可以做到这一点,但我也没有寻找过。

      【讨论】:

      • 3 小时 48 分钟应该是 4 小时,因为已经过了 3:30(或 3.5)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多