首页 > 解决方案 > 获取满足Java条件的下一个日期

问题描述

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

给定一些条件,我想在Date满足它们时得到下一个。例如,如果条件是minute = 01andsecond = 30现在时间是15:58:00,则函数应该在今天返回16:01:30。我怎样才能在 Java 中做到这一点?

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

感谢并为我糟糕的英语感到抱歉。

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

标签: javatime

解决方案


您可以为此使用流:

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

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

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

如果要去除纳秒,请替换LocalDateTime.now()LocalDateTime.now().withNano(0).


推荐阅读