LocalDateTime
从 Java 8 开始,java.time
包提供了新的日期和时间 API,主要涉及的类型有:
本地日期和时间:
LocalDate
、LocalTime
、LocalDateTime
。带时区的日期和时间:
ZoneDateTime
;时刻:
Instant
;时区:
ZoneId
,ZoneOffset
;时间间隔:
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()
获取到的总是以当前默认时区返回的。LocalDateTime
、LocalDate
和LocalTime
默认严格按照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()
方法:
LocalDate date = LocalDate.of(2019, 1, 1); // 2019-01-01
LocalTime time = LocalTime.of(23, 59, 59); // 23:59:59
LocalDateTime dateTime = LocalDateTime.of(2019, 1, 1, 23, 59, 59); // 2019-01-01T23:59:59
LocalDateTime dt3 = LocalDateTime.of(date, time); // 2019-01-01T23:59:59
因为严格按照ISO 8601的格式,因此,将字符串转换为LocalDateTime
就可以传入标准格式:
LocalDateTime dateTime = LocalDateTime.parse("2015-05-10T06:30:00"); // 2015-05-10T06:30
LocalTime time = LocalTime.parse("06:30:00"); // 06:30
LocalDate date = LocalDate.parse("2015-05-10"); // 2015-05-10
注意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
最后更新于
这有帮助吗?