如何从给定的 Instant 获取第二天的日期结束时间?(爪哇)

Yas*_*ani 5 java time date java-time

我有一个即时日期,例如:2020-03-09T20:13:57.089Z并且我想在即时中找到第二天的结束时间,例如 - 2020-03-10T23:59:59.089Z(这将是与初始日期相比的第二天的结束时间)

如何使用 Java 中的 Instant 来做到这一点?

Hor*_*lea 5

如果您想要实际的午夜 (00:00),您可以使用:

instant.plus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS);
Run Code Online (Sandbox Code Playgroud)

否则,另一个解决方案是:

LocalDateTime ldt1 = LocalDateTime.ofInstant(instant.plus(1, ChronoUnit.DAYS), ZoneId.systemDefault());

ldt1 = ldt1
        .withHour(23)
        .withMinute(59)
        .withSecond(59);

Instant result = ldt1.atZone(ZoneId.systemDefault()).toInstant();
Run Code Online (Sandbox Code Playgroud)


Dea*_*ool 2

一种方法是转换Instant为时ZonedDateTimeUTC并根据要求修改日期,然后将其转换回来

正午 :

Instant result = instant.atOffset(ZoneOffset.UTC)
                        .plusDays(1).with(LocalTime.of(11,59,59,instant.getNano()))
                        .toInstant();
Run Code Online (Sandbox Code Playgroud)

一天的结束 :

Instant result = instant.atOffset(ZoneOffset.UTC)
                        .plusDays(1).with(LocalTime.of(23,59,59,instant.getNano()))
                        .toInstant();
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案。--- 但是,您应该使用 `atOffset()` 而不是 `atZone()`。 (2认同)