Joda-Time的近似时间段

cra*_*man 5 java time jodatime

我使用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);
    }
Run Code Online (Sandbox Code Playgroud)

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

3 minutes, 23 seconds
1 hour, 30 minutes, 57 seconds
1 day, 23 hours, 21 minutes, 19 seconds
Run Code Online (Sandbox Code Playgroud)

有什么方法可以得到大致的时间而不是精确的吗?例如,如果从1分30秒后initialTimestamp,它只返回1.5 minutes.同样,如果一小时35分钟过去,它将返回about 1.5 hours而不是1小时35分钟xy秒.

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

Dov*_*man 1

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

我不知道有任何通用实用程序可以执行此操作,但我也没有寻找过。