获取Java中满足条件的下一个日期

jnt*_*nts 0 java time

我知道这应该很简单,但我在互联网上找不到任何东西。

鉴于某些条件,我想Date在满足条件时获得下一个。例如,如果条件是minute = 01并且second = 30现在时间是15:58:00,则函数应该在今天返回16:01:30。我如何在 Java 中完成此操作?

我需要能够设置至少秒、分钟和小时的条件,但我希望有可能将一个条件设置为任何值(如上面的示例,未指定小时)。

感谢并抱歉我的英语不好。

编辑: 我看到有些事情可能需要澄清:我想总是满足条件的当前时间之后获得一个日期(或其他)。此外,这适用于 Minecraft Spigot 服务器,也许此信息可以提供帮助。

Jer*_*eke 5

您可以为此使用流:

Optional<LocalDateTime> firstMatch = 
                         Stream.iterate(
                                  LocalDateTime.now(),
                                  ldt -> ldt.plusSeconds(1L))
                               .filter(
                                  // Insert your condition here
                                  ldt -> ldt.getSecond() == 0) 
                               .findFirst();
Run Code Online (Sandbox Code Playgroud)

这段代码所做的是获取电流LocalDateTime并使用它来生成LocalDateTime对象流(每次将时间提前 1 秒)。一旦遇到LocalDateTime与提供的条件匹配的 ,它就会返回此对象并终止流。

请记住,如果条件需要一段时间才能变为真,则使用这种方法会生成很多对象,因此效率不高。

如果你想剥离纳秒替换LocalDateTime.now()LocalDateTime.now().withNano(0).

  • 恕我直言,它比 while 循环更漂亮,但这只是个人意见。稍微解释一下代码:Jeroen 创建了一个无尽的对象流。他现在从一个日期对象开始,并创建一个未来 1 秒的新对象。流会处理其余的事情,因此从现在开始,您每秒都会获得 LocalDateTime 对象。在过滤器中,您定义了过滤流的条件,但是您获得了满足此条件的每个时间戳,因此您必须使用findfirst。然后你就得到了第一个符合你的条件的对象。如前所述,您生成了很多对象...... (2认同)