我需要将我的GregorianCalendar设置为一天中的特定小时,这是最接近的但不是未来。 如果现在时间是21:00,我需要设置小时22,它将被设置为昨天。但如果现在的时间是23:00,它将在今天设定。
答案 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
会选择不同的时间,您需要检测到并采取相应的行动。
你问了一个GregorianCalendar
,我会给你一个,但请允许我提一下,这个课程已经过时且设计不合理,所以你不应该想要一个。我建议您使用java.time
,而不是现代Java日期和时间API。
如果您需要一个GregorianCalendar
或Calendar
对象用于遗留API,您无法立即更改或不想更改,请按以下方式进行转换:
GregorianCalendar cal = GregorianCalendar.from(closestHour);