Joda 时间计算两个 datetime 对象之间的天数、小时数、分钟数和秒数

Joda time calculating the days, hours, minutes, and seconds between two datetime objects

我正在尝试查找两个 date/times 之间的天数、小时数、分钟数和秒数。我以为我可以使用句点,我尝试了下面的代码,但我得到了一个没有意义的答案。

    DateTime dt1 = new DateTime("2004-12-13T21:39:45.618-06:00");
    DateTime dt2 = new DateTime("2004-12-13T21:39:45.618-08:00");
    Period p = new Period(dt1, dt2);

    System.out.println("Test: " + p);

由此我得到输出:

I/System.out: Test: PT2H

不确定这是什么意思。

感谢您的帮助

我想你必须格式化句号的对象。参考这个 link Period to string

toString() method in Period gives you the value as ISO8601 持续时间格式。

来自API:

Gets the value as a String in the style of the ISO8601 duration format. Technically, the output can breach the ISO specification as weeks may be included. For example, "PT6H3M5S" represents 6 hours, 3 minutes, 5 seconds.

如您要求分别获得小时分钟seconds 您可以使用 API:

中方便的 get 方法
import org.joda.time.DateTime;
import org.joda.time.Period;

...
DateTime dt1 = new DateTime("2004-12-13T21:39:45.618-06:00");
DateTime dt2 = new DateTime("2004-12-13T21:39:45.618-08:00");
Period p = new Period(dt1, dt2);

System.out.println("DAYS: " + p.getDays())
System.out.println("HOURS: " + p.getHours());
System.out.println("MINUTES: " + p.getMinutes());
System.out.println("SECONDS: " + p.getSeconds());

或者按照其他答案的建议使用 PeriodFormatter.

您需要格式化 Period。一种简单的方法是像这样使用默认值:

PeriodFormat.getDefault().print(period)

您还可以使用 PeriodFormatter 创建自己的格式。

句点以 ISO 格式打印

The standard ISO format - PyYmMwWdDThHmMsS.

如果您需要查找两天之间的天数、小时数、分钟数和秒数,您应该将句点转换为特定类型。例如:

  Period p = new Period(dt1, dt2);
  System.out.println("Days: " + p.toStandardDays().getDays());
  System.out.println("Hours: " + p.toStandardHours().getHours());
  System.out.println("Minutes: " + p.toStandardMinutes().getMinutes());
  System.out.println("Seconds: " + p.toStandardSeconds().getSeconds());

或在类DaysHoursMinutesSeconds

中使用特殊的静态方法
  System.out.println("Days: " + Days.daysBetween(dt1, dt2));
  System.out.println("Hours: " + Hours.hoursBetween(dt1, dt2));
  System.out.println("Minutes: " + Minutes.minutesBetween(dt1, dt2));
  System.out.println("Seconds: " + Seconds.secondsBetween(dt1, dt2));