从GregorianCalendar

时间:2018-02-05 08:32:15

标签: java gregorian-calendar

我需要将我的GregorianCalendar设置为一天中的特定小时,这是最接近的但不是未来。 如果现在时间是21:00,我需要设置小时22,它将被设置为昨天。但如果现在的时间是23:00,它将在今天设定。

1 个答案:

答案 0 :(得分:1)

    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,您需要提供所需的时区。当然还有所需的时钟。如果不存在所需的时间,通常在春季过渡到夏令时(DST),ZonedDateTime会选择不同的时间,您需要检测到并采取相应的行动。

java.time

你问了一个GregorianCalendar,我会给你一个,但请允许我提一下,这个课程已经过时且设计不合理,所以你不应该想要一个。我建议您使用java.time,而不是现代Java日期和时间API。

如果您需要一个GregorianCalendarCalendar对象用于遗留API,您无法立即更改或不想更改,请按以下方式进行转换:

    GregorianCalendar cal = GregorianCalendar.from(closestHour);

链接: Oracle tutorial: Date Time