我正在使用带有Java的Joda-Time库。我在尝试将Period对象转换为“x天,x小时,x分钟”格式的字符串时遇到了一些困难。
首先通过向它们添加一些秒来创建这些Period对象(它们按秒序列化为XML,然后从它们重新创建)。如果我只是在其中使用getHours()等方法,那么我得到的只是零,而使用getSeconds的总秒数。
如何让Joda计算各个字段的秒数,如天,小时等......?
答案 0 :(得分:91)
您需要对句点进行标准化,因为如果您使用总秒数构建它,那么这是它唯一的值。将其标准化将其分解为总天数,分钟,秒等。
由ripper234编辑 - 添加TL;DR version: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天)。
答案 1 :(得分:22)
您也可以使用默认格式化程序,这对大多数情况都有用:
Period period = new Period(startDate, endDate);
System.out.println(PeriodFormat.getDefault().print(period))
答案 2 :(得分:12)
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()));
答案 3 :(得分:2)
PeriodFormatter daysHoursMinutes = new PeriodFormatterBuilder()
.appendDays()
**.appendSuffix(" day", " days")
.appendSeparator(" and ")
.appendMinutes()
.appendSuffix(" minute", " minutes")**
.appendSeparator(" and ")
.appendSeconds()
.appendSuffix(" second", " seconds")
.toFormatter();
你错过了工作时间,这就是原因。几天后安装并解决问题。