Skip to content

LocalDateTime

About 419 wordsAbout 1 min

2025-06-13

简单学习一下LocalDateTime。

一、LocalDateTime源码阅读

类LocalDateTime的定义

public final class LocalDateTime
        implements Temporal, TemporalAdjuster, ChronoLocalDateTime<LocalDate>, Serializable {

}

public static LocalDateTime now()

LocalDateTime不能被new出来,只能使静态方法返回一个LocalDateTime的对象。

public static LocalDateTime now() {
    return now(Clock.systemDefaultZone());
}
public static LocalDateTime now(Clock clock) {
    Objects.requireNonNull(clock, "clock");
    final Instant now = clock.instant(); // called once
    ZoneOffset offset = clock.getZone().getRules().getOffset(now);
    return ofEpochSecond(now.getEpochSecond(), now.getNano(), offset);
}

pulbic LocalDate toLocalDate()

返回LocalDateTime 中的LocalDate部分内容。

具体的LocalDate操作可以参考: LocalDate

private final LocalDate date;
@Override
public LocalDate toLocalDate() {
    return date;
}

public LocalTime toLocalTime()

获取到LocalDateTime中LocalTime部分内容。

具体的LocalTime操作可以参考: LocalTime

@Override
public LocalTime toLocalTime() {
    return time;
}

public boolean isBefore(ChronoLocalDateTime<?> other)

nowDateTime.isBefore(oldDateTime)

判断nowDateTime是否在oldDateTime时间之前,是的话,返回true,否则返回false。

    public boolean isBefore(ChronoLocalDateTime<?> other) {
        if (other instanceof LocalDateTime) {
            return compareTo0((LocalDateTime) other) < 0;
        }
        return ChronoLocalDateTime.super.isBefore(other);
    }

同上面的isBefore。

nowDateTime.isAfter(oldDateTime),判断nowDateTime是否在oldDateTime之后,是的话,返回true,否则返回false。

public boolean isAfter(ChronoLocalDateTime<?> other) {
    if (other instanceof LocalDateTime) {
        return compareTo0((LocalDateTime) other) > 0;
    }
    return ChronoLocalDateTime.super.isAfter(other);
}

二、Date与LocalDate、LocalTime、LocalDateTime转换

2.1、Date转LocalDate等

2.1.1、

public static void date2Local() {
    // 新建一个Date对象
    Date date = new Date();

    // 获取到默认时区
    ZoneId zoneId = ZoneId.systemDefault();
    // 将Date转化成具有时区的ZoneDateTime对象。
    ZonedDateTime zonedDateTime = date.toInstant().atZone(zoneId);
    LocalDate localDate = zonedDateTime.toLocalDate();
    LocalTime localTime = zonedDateTime.toLocalTime();
    LocalDateTime localDateTime = zonedDateTime.toLocalDateTime();
}

2.1.2、

public void date2Local2() {
    // 新建一个Date对象
    Date date = new Date();

    // 获取当前系统默认的时区
    ZoneId zoneId = ZoneId.systemDefault();
    // 转化
    LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), zoneId);
    LocalDate localDate = LocalDate.ofInstant(date.toInstant(), zoneId);
    LocalTime localTime = LocalTime.ofInstant(date.toInstant(), zoneId);
}

2.2、LocalDate等转Date

2.2.1、java.time.LocalDateTime -> java.util.Date

LocalDateTime now = LocalDateTime.now();
// instant
Instant instant = now.atZone(ZoneId.systemDefault()).toInstant();
Date from = Date.from(instant);

2.2.2、java.time.LocalDate -> java.util.Date

LocalDate now = LocalDate.now();
Instant instant = now.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant();
Date from = Date.from(instant);

Changelog

7/19/25, 4:20 PM
View All Changelog
  • c089a-Merge branch 'dev1'on

求求了,快滚去学习!!!

求求了求求了,快去学习吧!

【题单】贪心算法

不知道方向的时候,可以多看看书,书会给你指明下一步该干什么,加油!