句点到字符串
我正在将Joda-Time库与Java一起使用。我在尝试将 Period 对象转换为“x 天,x 小时,x 分钟”格式的字符串时遇到了一些困难。
首先通过向这些对象添加秒数来创建这些 Period 对象(它们作为秒序列化为 XML,然后从中重新创建)。如果我只是在其中使用getHours()等方法,我得到的只是零和getSeconds的总秒数。
如何让Joda将秒数计算到相应的字段中,例如天,小时等?
我正在将Joda-Time库与Java一起使用。我在尝试将 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 minutes and 12 seconds
3 days and 24 minutes and 12 seconds
因此,您可以看到非规范化时间段的输出只是忽略了小时数(它没有将72小时转换为3天)。
您还可以使用默认格式化程序,这在大多数情况下都很有用:
Period period = new Period(startDate, endDate);
System.out.println(PeriodFormat.getDefault().print(period))