将 ZonedDateTime 转换为当天结束

Convert ZonedDateTime to end of the day

在此代码中,

Instant i = Instant.ofEpochMilli(inputDate);
ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(instance, ZoneId.of(marketplaceIdToZoneMap.get(timeZone)));

我只希望这个时区日期时间是一天的结束,

如果 zonedDateTime 的值为:2019-11-14 12:00:99

输出应为 2019-11-14 23:59:59

一个简单的解决方案是手动设置您想要的值:

zonedDateTime.withHour(23).withMinute(59).withSecond(59);

另一个解决方案可能是重置 hours/minutes/second,添加一天,删除一秒:

zonedDateTime.truncatedTo(ChronoUnit.DAYS).plusDay(1).minusSecond(1);

如果你想要当天的最后一秒,你可以使用:

ZonedDateTime eod = zonedDateTime.with(LocalTime.of(23, 59, 59));

如果你想要一天中的最长时间,你可以使用:

ZonedDateTime eod = zonedDateTime.with(LocalTime.MAX);

请注意,在某些奇怪的情况下,23:59:59 可能不是特定日期的有效时间(通常是时区变化复杂的历史日期)。