gpt4 book ai didi

java - 从 GregorianCalendar 获取一天中最近的非 future 时间

转载 作者:行者123 更新时间:2023-12-02 11:40:23 32 4
gpt4 key购买 nike

我需要将 GregorianCalendar 设置为一天中的特定时间,这是最近的时间,但不是 future 的时间。如果现在时间是 21:00,我需要设置 22 点,那么它将设置为昨天。但如果现在时间是 23:00,则会设置为今天。

最佳答案

    LocalTime hour = LocalTime.of(22, 0);
ZonedDateTime now = ZonedDateTime.now(ZoneId.of("America/Indiana/Marengo"));
ZonedDateTime closestHour = now.with(hour);
if (closestHour.isAfter(now)) { // future
closestHour = now.minusDays(1).with(hour);
}

System.out.println(closestHour);

此打印内容

2018-02-04T22:00-05:00[America/Indiana/Marengo]

以上是一个草图,而不是可供生产的代码。如果您想要的时区不是 America/Indiana/Marengo,则需要提供。当然还有所需的时钟时间。如果所需的时间不存在,通常是在 Spring 过渡到夏季时间 ( DST ),ZonedDateTime将选择不同的时间,您需要检测到该时间并采取相应的行动。

java.time

您要求一个 GregorianCalendar,我会给您一个,但请允许我提一下,该类早已过时且设计不佳,因此您不应该想要一个。我建议您使用现代 Java 日期和时间 API java.time

如果您需要GregorianCalendar或者只是一个Calendar对于您现在无法更改或不想更改的旧版 API 的对象,请按如下方式转换:

    GregorianCalendar cal = GregorianCalendar.from(closestHour);

链接: Oracle tutorial: Date Time

关于java - 从 GregorianCalendar 获取一天中最近的非 future 时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48618452/

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