将 ZonedDateTime 转换为一天结束

Ami*_*mar 4 java timezone datetime zoneddatetime

在这段代码中,

Instant i = Instant.ofEpochMilli(inputDate);
ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(instance, ZoneId.of(marketplaceIdToZoneMap.get(timeZone)));
Run Code Online (Sandbox Code Playgroud)

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

就像 zonedDateTime 的值是:2019-11-14 12:00:99

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

ass*_*ias 10

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

ZonedDateTime eod = zonedDateTime.with(LocalTime.of(23, 59, 59));
Run Code Online (Sandbox Code Playgroud)

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

ZonedDateTime eod = zonedDateTime.with(LocalTime.MAX);
Run Code Online (Sandbox Code Playgroud)

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


Fab*_*ien 6

一个简单的解决方案是手动设置所需的值:

zonedDateTime.withHour(23).withMinute(59).withSecond(59);
Run Code Online (Sandbox Code Playgroud)

另一种解决方案可能是重置小时/分钟/秒,添加一天,并删除一秒:

zonedDateTime.truncatedTo(ChronoUnit.DAYS).plusDay(1).minusSecond(1);
Run Code Online (Sandbox Code Playgroud)