句点到字符串

2022-08-31 17:08:12

我正在将Joda-Time库与Java一起使用。我在尝试将 Period 对象转换为“x 天,x 小时,x 分钟”格式的字符串时遇到了一些困难。

首先通过向这些对象添加秒数来创建这些 Period 对象(它们作为秒序列化为 XML,然后从中重新创建)。如果我只是在其中使用getHours()等方法,我得到的只是零和getSeconds的总秒数。

如何让Joda将秒数计算到相应的字段中,例如天,小时等?


答案 1

您需要规范化周期,因为如果您使用总秒数构造它,那么这是它唯一的值。规范化会将其分解为总天数、分钟数、秒数等。

由 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天)。


答案 2

您还可以使用默认格式化程序,这在大多数情况下都很有用:

Period period = new Period(startDate, endDate);
System.out.println(PeriodFormat.getDefault().print(period))

推荐