LocalDateTime

Java 8 开始,java.time包提供了新的日期和时间 API,主要涉及的类型有:

  • 本地日期和时间:LocalDateLocalTimeLocalDateTime

  • 带时区的日期和时间:ZoneDateTime

  • 时刻:Instant

  • 时区:ZoneIdZoneOffset

  • 时间间隔:Duration

以及一套新的用于取代SimpleDateFormat的格式化类型DateTimeFormatter

和旧的 API 相比,新 API 严格区分了时刻,本地日期、本地时间和带时区的日期时间,并且对日期和时间进行运算更加方便。

此外,新 API 修改了旧 API 不合理的常量设计:

  • Monoth的范围用1~12表示1月到12月

  • week的范围用1~7表示周一到周日。

LocalDate date = LocalDate.now();    // 2025-01-20
LocalTime time = LocalTime.now();    // 11:21:40.748774
LocalDateTime dateTime = LocalDateTime.now(); // 2025-01-20T11:21:40.748785

本地日期和时间通过now()获取到的总是以当前默认时区返回的。LocalDateTimeLocalDateLocalTime默认严格按照ISO 8601规定的日期和时间格式进行打印。

LocalDateTime dateTime = LocalDateTime.now();   // 2025-01-20T11:22:35.205451
LocalDate date = dateTime.toLocalDate();        // 转换到当前日期 2025-01-20
LocalTime time = dateTime.toLocalTime();        // 转化到当前时间 11:22:35.205451

反过来,通过指定的日期和时间创建LocalDateTime可以通过of()方法:

因为严格按照ISO 8601的格式,因此,将字符串转换为LocalDateTime就可以传入标准格式:

注意ISO 8601规定的日期和时间分隔符是T。标准格式如下:

  • 日期:yyyy-MM-dd

  • 时间:HH:mm:ss

  • 带毫秒的时间:HH:mm:ss.SSS

  • 日期和时间:yyyy-MM-dd'T'HH:mm:ss

  • 带毫秒的日期和时间:yyyy-MM-dd'T'HH:mm:ss.SSS

最后更新于

这有帮助吗?