期间为字符串

时间:2009-09-17 18:28:41

标签: java jodatime period

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

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

如何让Joda计算各个字段的秒数,如天,小时等......?

4 个答案:

答案 0 :(得分:91)

您需要对句点进行标准化,因为如果您使用总秒数构建它,那么这是它唯一的值。将其标准化将其分解为总天数,分钟,秒等。

由ripper234编辑 - 添加TL;DR versionPeriodFormat.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();

你错过了工作时间,这就是原因。几天后安装并解决问题。