我在Java中使用Joda-Time库。我在尝试将Period对象转换为“ x天,x小时,x分钟”格式的字符串时遇到了一些困难。
这些Period对象首先通过向它们添加一定数量的秒来创建(它们以秒为单位序列化为XML,然后从它们重新创建)。如果仅在其中使用getHours()等方法,则得到的全部为零,并且使用getSeconds 的总秒数。
如何让Joda计算相应字段(例如天,小时等)中的秒数?
你需要对周期进行归一化,因为如果用总秒数构造周期,则这是它唯一的值。对其进行归一化会将其分解为天,分钟,秒等的总数。
通过ripper234编辑 -添加TL; DR版本:PeriodFormat.getDefault().print(period)
PeriodFormat.getDefault().print(period)
例如:
public static void main(String[] args) { PeriodFormatter daysHoursMinutes = new PeriodFormatterBuilder() .appendDays() .appendSuffix(" day", " days") .appendSeparator(" and ") .appendMinutes() .appendSuffix(" minute", " minutes") .appendSeparator(" and ") .appendSeconds() .appendSuffix(" second", " seconds") .toFormatter(); Period period = new Period(72, 24, 12, 0); System.out.println(daysHoursMinutes.print(period)); System.out.println(daysHoursMinutes.print(period.normalizedStandard())); }
将打印:
24 minutes and 12 seconds
3 days and 24 minutes and 12 seconds
因此,你可以看到非标准化期间的输出仅忽略了小时数(它没有将72小时转换为3天)。