我使用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秒。
我知道返回的字符串可以被解析和操作,但我正在寻找更复杂的东西。
答案 0 :(得分:5)
查看PrettyTime。
答案 1 :(得分:1)
我认为你需要为此创建自己的格式化程序,它会查看期间并确定要格式化的粒度,例如63秒“1分钟”或3小时48分钟: 3小时”。听起来像你只想报告一个最大的时间单位,而忽略更细粒度的单位时间。您需要定义舍入行为以及如何在几天内呈现时间:“44天前”或“一个月前”或“1个月和2周前”。
我不知道有任何通用实用程序可以做到这一点,但我也没有找到它。