繁体   English   中英

Joda时间计算两个日期时间对象之间的天,小时,分钟和秒

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

我试图找到两个日期/时间之间的天,小时,分钟和秒。 我以为我可以使用句点,并且尝试了下面的代码,但是得到了一个毫无意义的答案。

    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

不知道这是什么意思。

谢谢你的帮助

Period toString()方法为您提供ISO8601持续时间格式的值。

从API:

以ISO8601持续时间格式的样式获取作为String的值。 从技术上讲,输出可能会违反ISO规范,因为可能需要数周的时间。 例如,“ PT6H3M5S”代表6小时3分5秒。

当您要求分别获取小时分钟秒时,您可以使用来自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

期间以ISO格式打印

该标准的ISO格式- P yYmMwWd d牛逼HH彩信。

如果需要查找两天之间的天,小时,分钟和秒,则应将期间转换为特定类型。 例如:

  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));

我认为您必须格式化周期对象。 将此链接期间引用到字符串

您需要格式化您的Period 一种简单的方法是使用默认值,如下所示:

PeriodFormat.getDefault().print(period)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM