当前位置: 首页 > 知识库问答 >
问题:

我对Java8中的LocalDateTime until方法有疑问

慕容成和
2023-03-14

我使用LocalDateTime几乎导致了一个在线错误,直到例如:

@Test
public void test(){

    DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    LocalDateTime startTime = LocalDateTime.parse("2022-08-09 11:00:00", df);

    LocalDateTime endTime = LocalDateTime.parse("2022-08-11 10:00:00", df);

    System.out.println(startTime.until(endTime, ChronoUnit.DAYS));
}

我最初认为他应该2天回来,但结果是1天!

然后我看了看对应的源代码,我现在好像明白了:如果超过一天,不到两天,那就只返回一天。

我想问一下Java或Spring中是否有满足我需求的工具。

我想让它回到2天,这符合人们的直觉。

当然,我可以包装一个实用程序类来实现这一点,但我想知道Java中是否有可用的实现?

我的业务场景如下:如果是

例如:

如果开始时间为2022-08-11 10:00:00,则操作将在2022-8-14 10:00:00之后执行。

但是,当我在2022-08-14 11:00:00调用API时,返回3,这不符合条件

因此,任务仍然没有执行,导致了bug。

共有2个答案

关正雅
2023-03-14

只需在结束时间的同一小时、分和秒设置startTime(反之亦然)。然后比较它们,它会给你2天的时间。

闻人博
2023-03-14

我的业务场景是这样的:如果当前时间在某个时间的三天之内,就会完成一些事情。

这听起来很像您在使用日期而不是日期时间。因此,您应该改用LocalDate

您可以将< code>startTime和< code>endTime转换为< code>LocalDate,如下所示:

System.out.println(
    startTime.toLocalDate().until(endTime.toLocalDate(), ChronoUnit.DAYS)
);

或者更好的是,首先将字符串解析为LocalDates,而不是LocalDateTime

var startTime = LocalDate.parse("2022-08-09 11:00:00", df);

var endTime = LocalDate.parse("2022-08-11 10:00:00", df);

System.out.println(startTime.until(endTime, ChronoUnit.DAYS));
 类似资料:
  • 我遇到了一些问题,AppEngine抱怨我的代码有Java1.8方法,而AppEngine需要Java1.7。下面是错误跟踪。我不知道该怎么修理它。

  • 这个方法是返回对当前正在执行的线程对象的引用。 但是,如果有两个线程在并行执行呢 ? 难道返回两个线程对象吗 ?

  • 我正在学习新Java8中的lambdas。有一件事很有趣。如果方法具有与函数接口相同的签名,则可以使用lambdas API将其分配给方法。例如。 这个方法(integer.compare)是静态的,取两个值,一切都很完美。签名与接口方法比较中的签名相同。但这可以用非静态方法来实现,例如 这个方法是非静态的(实例级别),而且它只需要一个值。正如我所理解的,在Java中没有非静态方法,每个方法都是静

  • 以下代码是方法com.lmax.disruptor.SequenceGroups#addSequences 红框部分的代码为啥要重复两次?是有什么讲究吗?

  • 本文向大家介绍Java8中的default方法详解,包括了Java8中的default方法详解的使用技巧和注意事项,需要的朋友参考一下 Java 8新增了default方法,它可以在接口添加新功能特性,而且还不影响接口的实现类。下面我们通过例子来说明这一点。 上面的代码显示了MyClass类实现了InterfacesA接口的saySomething()方法。现在我们为InterfacesA接口新增

  • 在IDE上执行程序时,它不会给出任何输出。我原以为它会给出。