修改 LocalDateTime 对象中的时间

Modifiying time in LocalTimeDate object

在 Java 中给定一个 LocalDateTime 对象。如何将此时间设置为 00:00:00 ? 一种方法是创建一个与此日期相同的新 LocalDateTime 对象并将其设置为 0。 还有其他方法吗?

如果您查看 LocalDateTime,您会看到:


    /**
     * The date part.
     */
    private final LocalDate date;
    /**
     * The time part.
     */
    private final LocalTime time;

所以LocalDateTime是不可变的。这很好,因为这意味着您可以将实例传递给其他代码而不用担心它可能会被修改,并简化了多线程的访问。

我的意思是你需要创建一个新的实例来修改时间。

LocalDateTime 是不可变的,这意味着您不能更改 LocalDateTime 对象(只能创建新对象)。如果您使用修改操作,则会创建另一个 LocalDateTime 对象。

您显然可以手动创建另一个对象,但您也可以使用 .toLocalDate 获得一个 LocalDate-对象,然后使用 .atStartOfDay 再次获得一个 LocalDateTime-对象:

yourLocalDateTime.toLocalDate().atStartOfDay()

无法修改给定的 LocalDateTime 对象,因为它们是不可变的。但是您可以获得一个具有所需日期的新 LocalDateTime 对象。

有几种方法可以做到这一点(所有假设 ldt 是输入并且 atMidnight 是类型 LocalDateTime 的变量):

  1. atMidnight = ldt.with(LocalTime.MIDNIGHT)(首选方法)
  2. atMidnight = ldt.truncatedTo(ChronoUnit.DAYS)
  3. atMidnight = ldt.toLocalDate().atStartOfDay()

最后,如果您的意思是“没有时间”,那么您可以使用 toLocalDate.

LocalDateTime 简单地转换为 LocalDate

以下将给出您要求的正确结果:

localDateTime = localDateTime.withHour(0).withMinute(0).withSecond(0);

也试试这些(有些不同的结果):

localDateTime = localDateTime.with(LocalTime.of(0, 0, 0));
localDateTime = localDateTime.withHour(0).withMinute(0).withSecond(0).withNano(0);