【问题标题】:Strange format from JodaTime when calculating time difference with Java使用Java计算时差时来自JodaTime的奇怪格式
【发布时间】:2016-08-29 17:43:21
【问题描述】:

我正在尝试使用以下代码查找两次之间的持续时间:

                    DateTimeFormatter formatter = DateTimeFormat.forPattern("HH:mm");
                        System.out.println(airTime1);
                        System.out.println(startTime1);
                    Minutes difference = ((Minutes.minutesBetween(startTime1,airTime1)));
                    String differenceS = String.valueOf(difference);
                        System.out.println(differenceS);
                    LocalTime remaining1 = formatter.parseLocalTime(differenceS);
                        System.out.println(remaining1);

airTime1 和 startTime1 都是 localTime 变量。差异应包含两次之间的持续时间。差异是差异的字符串表示,因为分钟不能转换为字符串。

当我在12:00 & 13:00等变量中输入时间时,变量记录为:12:00:00.000 & 13:00:00.000,但是differenceS收到的值是PT-60M,很明显引发错误。有谁知道为什么分钟差线可以计算这个值?

提前致谢!

【问题讨论】:

  • difference.getMinutes() 不适合你吗?
  • 你的意思是像这样使用 difference.getMinutes 吗?分钟差1 = (difference.getMinutes(startTime1,airTime1));
  • 没有。 jodatime 的 Minutes 类提供了一个方法 getMinutes(),该方法不带任何参数,该方法返回表示为 int 值的分钟数。这不正是你想要的吗?
  • 这听起来和我想做的完全一样。抱歉我的无知,我将如何实施?
  • 将代码示例中的最后 4 行替换为 System.out.println(difference.getMinutes())。如果您只需要绝对值(非负),请使用 Math.abs(int):int

标签: time jodatime localtime


【解决方案1】:

jodatimeMinutes 类以一种返回 ISO8601 持续时间格式的字符串的方式覆盖 toString() 方法,如 JavaDoc 中所述。这正是您的 PT-60M 所代表的。持续时间 -60 分钟。

如果您只想打印原始分钟数,您的代码可能如下所示:

DateTimeFormatter formatter = DateTimeFormat.forPattern("HH:mm");
System.out.println(airTime1);
System.out.println(startTime1);
Minutes difference = Minutes.minutesBetween(startTime1,airTime1);
System.out.println(Math.abs(difference.getMinutes()));

【讨论】:

  • 啊,我明白了!您如何将时间从 ISO 标准转换为时间戳?
  • 我不明白你的问题。 Minutes 是相对时间值,而 Timestamp 是绝对值(唯一的时间点)。您不能在不暗示某些上下文的情况下将 Minutes 转换为 Timestamp
  • 我想这一定是我的术语。那么如果输出的是PT60M(这次是正值),怎么让它只显示60呢?
猜你喜欢
  • 2018-05-22
  • 2018-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
相关资源
最近更新 更多