Java 从一天到另一天的持续时间错误

标签 java duration localtime

我使用 Java Duration 发现了一个非常简单的问题。

     LocalTime SaturdayStart = LocalTime.of(22, 30); 
     LocalTime SaturdayEnd = LocalTime.of(01, 00);
     System.out.println(SaturdayStart);
     System.out.println(SaturdayEnd);
     System.out.println(Duration.between(SaturdayStart, SaturdayEnd));

此代码的输出是:

22:30
01:00
PT-21H-30M

这就是问题所在。我希望持续时间为 2H-30M,而不是 21H。是什么导致该方法无法看到两个时间之间的“日间变化”?

最佳答案

请记住,LocalTime 仅表示一天中的单个时间,没有时区。

由于它代表一天中您在时钟上看到的时间,因此您无法使用它来计算今天 22:30 和 01:00 < em>第二天。您的两个 LocalTime 对象分别代表今天 22:30 和今天 01:00。

要考虑日期,您需要一个LocalDateTime。这不仅代表时间(没有时区),还代表 ISO-8601 日历系统中的日期。您可以像这样创建两个 LocalDateTime 对象:

LocalDateTime start = LocalDateTime.of(LocalDate.now(), LocalTime.of(22, 30));
LocalDateTime end = start.plusDays(1).withHour(1).withMinute(0);

然后你可以得到持续时间:

Duration d = Duration.between(start, end);
System.out.println(d);

顺便说一句,您在错误输出中得到的 - 字符不是不同组件的分隔符。它们是负面信号。这是因为您从 01:00 减去 22:30,这就像用较小的数字减去较大的数字,您会得到一个负数。

关于Java 从一天到另一天的持续时间错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49052303/

相关文章:

java - Android webview vs. imageview 显示图片的性能

java - 将 XHTML 和自定义标签读入 DOM 树

java - 在 Java 中用时间执行 A - B (A\B)?

javascript - Moment JS 在某些 PC 上显示出 1 小时的差异

java - 正在添加 AppCompat V7

java - 在 for 循环中, (int i : tall) do, 其中 tall 是一个 int 数组

testing - 什么是持续时间测试?

ffmpeg - 设置持续时间在 ffmpeg 中不起作用

python-3.x - python中人类可读的时区?

java - 在Java中生成两个时间/日期之间的特定间隔