【问题标题】:Joda time calculating the days, hours, minutes, and seconds between two datetime objectsJoda time 计算两个 datetime 对象之间的天、小时、分钟和秒
【发布时间】:2016-09-14 12:26:29
【问题描述】:

我正在尝试查找两个日期/时间之间的天数、小时数、分钟数和秒数。我以为我可以使用句号,我尝试了下面的代码,但我得到了一个荒谬的答案。

    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

不知道这是什么意思。

感谢您的帮助

【问题讨论】:

  • 你能解释一下为什么它是荒谬的,什么输出对你来说有意义吗?
  • 因为对我来说这毫无意义。我觉得有道理哈哈
  • 请说明做什么对您有意义。 PT2H 完美地描述了 2 小时的时间。
  • 你去解释了,谢谢
  • 我是否解释过这对我来说完全不明显,因为你没有具体说明什么是没有意义的。但如果我能不小心帮到你,我很高兴。

标签: java jodatime


【解决方案1】:

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

来自 API:

获取值作为 ISO8601 持续时间样式的字符串 格式。从技术上讲,输出可能会违反 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

【讨论】:

  • 感谢您的解释,非常感谢。 to string 方法只是给出了相同的答案。但它让我清楚地解释了我给出的输出。再次感谢。
  • @NicholasMuir 因为System.out.println 隐式调用对象上的toString() 方法。很高兴为您提供帮助。
【解决方案2】:

期间以 ISO 格式打印

标准 ISO 格式 - 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));

【讨论】:

    【解决方案3】:

    我认为您必须格式化句点的对象。参考这个链接 Period to string

    【讨论】:

      【解决方案4】:

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

      PeriodFormat.getDefault().print(period)
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-19
        • 1970-01-01
        • 1970-01-01
        • 2019-09-10
        • 2011-04-08
        • 2011-10-10
        • 1970-01-01
        • 2020-11-25
        相关资源
        最近更新 更多