gpt4 book ai didi

java - 如何避免时差为负时间?

转载 作者:行者123 更新时间:2023-12-02 11:17:36 24 4
gpt4 key购买 nike

我正在开发一个使用 Java8 Time 的应用程序。我遇到一个问题。

假设时间 A 是 08:00,时间 B 是 17:00,那么这两个时间之间的差异将是 9 小时,在我的情况下这是正确的,但如果时间 A 是 18:00,时间 B 是 02 :00 应该是 8 小时,但就我而言,我的程序返回 -16。请有人指导我如何解决这个问题。

我的代码:

@Test
public void testTime()
{
DateTimeFormatter format = DateTimeFormatter.ofPattern("HH:mm");

String s = "18:00";
String e = "02:00";

// Parse datetime string to java.time.LocalDateTime instance
LocalTime startTime = LocalTime.parse(s, format);
LocalTime endTime = LocalTime.parse(e, format);

String calculatedTime = ChronoUnit.HOURS.between(startTime, endTime)%24 + ":"
+ ChronoUnit.MINUTES.between(startTime, endTime)%60;

System.out.println(calculatedTime);

}

最佳答案

为什么不使用Duration类?它适用于像您这样的情况。

    Duration calculatedTime = Duration.between(startTime, endTime);
if (calculatedTime.isNegative()) {
calculatedTime = calculatedTime.plusDays(1);
}

System.out.println(calculatedTime);

这会以 ISO 8601 格式打印持续时间:

PT8H

要使用 Java 8 对其进行格式化:

    long hours = calculatedTime.toHours();
calculatedTime = calculatedTime.minusHours(hours);
String formattedTime = String.format(Locale.getDefault(), "%d:%02d",
hours, calculatedTime.toMinutes());
System.out.println(formattedTime);

这会打印

8:00

在 Java 9 中格式化(未测试):

    String formattedTime = String.format("%d:%02d", 
calculatedTime.toHoursPart(),
calculatedTime.toMinutesPart());

关于java - 如何避免时差为负时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44387638/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com