Joda-Time的近似时间段

时间:2011-01-06 10:07:09

标签: 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);
    }

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

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

有什么办法可以获得大致的时间而不是精确的时间吗?例如,如果从initialTimestamp开始经过一分钟和30秒,则只返回1.5 minutes。同样,如果一小时35分钟过去,它将返回about 1.5 hours而不是1小时35分钟xy秒。

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

2 个答案:

答案 0 :(得分:5)

查看PrettyTime

答案 1 :(得分:1)

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

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