我在 Java 中使用Joda-Time库。我在尝试将 Period 对象转换为“x 天,x 小时,x 分钟”格式的字符串时遇到了一些困难。
这些 Period 对象首先是通过向它们添加一定数量的秒来创建的(它们以秒的形式序列化为 XML,然后从它们重新创建)。如果我只是在其中使用 getHours() 等方法,我得到的只是零,而 getSeconds的总秒数。
如何让 Joda 计算各个字段的秒数,例如天数、小时数等...?
您需要对周期进行标准化,因为如果您使用总秒数构造它,那么这是它唯一的值。对其进行标准化会将其分解为总天数、分钟数、秒数等。
由 ripper234 编辑- 添加TL;DR 版本: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 分 12 秒
3天24分12秒
因此,您可以看到非标准化期间的输出只是忽略了小时数(它没有将 72 小时转换为 3 天)。
您还可以使用默认格式化程序,这对大多数情况都有好处:
Period period = new Period(startDate, endDate);
System.out.println(PeriodFormat.getDefault().print(period))
Period period = new Period();
// prints 00:00:00
System.out.println(String.format("%02d:%02d:%02d", period.getHours(), period.getMinutes(), period.getSeconds()));
period = period.plusSeconds(60 * 60 * 12);
// prints 00:00:43200
System.out.println(String.format("%02d:%02d:%02d", period.getHours(), period.getMinutes(), period.getSeconds()));
period = period.normalizedStandard();
// prints 12:00:00
System.out.println(String.format("%02d:%02d:%02d", period.getHours(), period.getMinutes(), period.getSeconds()));
PeriodFormatter daysHoursMinutes = new PeriodFormatterBuilder()
.appendDays()
**.appendSuffix(" day", " days")
.appendSeparator(" and ")
.appendMinutes()
.appendSuffix(" minute", " minutes")**
.appendSeparator(" and ")
.appendSeconds()
.appendSuffix(" second", " seconds")
.toFormatter();
你错过了时间,这就是原因。几天后追加几个小时,问题就解决了。