Java时间类型 | 类型转换 及 java.util.Date与java.time.LocalDateTime区别

目录

    • 例1:将字符串形式转为LocalDateTime时间形式
    • 例2:将LocalDateTime时间形式转为字符串形式
    • java.util.Date 与 java.time.LocalDateTime 区别

java.util.Date类 与 java.time.LocalDateTime类

  • java.util.Date 类是在 Java 1.0 中引入的,它是基于类似于 Unix 时间戳的毫秒数的。它的设计存在一些问题,因此在 Java 8 中引入了 java.time 包来提供更强大和易用的日期时间 API。
  • java.time.LocalDateTime 是 Java 8 新引入的 java.time 包中的类,它是为了解决 java.util.Date 的一些问题而设计的。

jdk 1.8起官方推荐使用 java.time.LocalDateTime

例1:将字符串形式转为LocalDateTime时间形式

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

// String: 2023/12/26 14:30:26
String time = "2023/12/26 14:30:26";
DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
LocalDateTime localDateTime = LocalDateTime.parse(time, inputFormatter);
// LocalDateTime: 2023-12-26T14:30:26

例2:将LocalDateTime时间形式转为字符串形式

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

// LocalDateTime: 2023-12-26T14:30:26
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String outputTime = localDateTime.format(outputFormatter);
// String: 2023-12-26 14:26:30

java.util.Date 与 java.time.LocalDateTime 区别

1. 不可变性:

  • java.util.Date 是可变的,这就意味着一旦创建,其内部状态可以被修改。
  • java.time.LocalDateTime 是不可变的,这意味着一旦创建,它的值不能被更改。任何修改操作都会返回一个新的实例。

2. 精度不同:

  • java.util.Date 对毫秒级别的精度提供支持,但对于更细粒度的时间,比如纳秒,就不适用。
  • java.time.LocalDateTime 可以处理纳秒级别的精度。

3. 时区处理:

  • java.util.Date 类本身不包含时区信息,但它的方法(如 toString())可能依赖于默认时区。
  • java.time.LocalDateTime 不包含时区信息,它是一种本地日期时间表示,但在 API 中还有 ZonedDateTime 和 OffsetDateTime 等类,用于处理带有时区信息的日期时间。
    ZonedDateTime: 包含了完整的日期、时间和时区信息
    ZonedDateTime zonedDateTime = ZonedDateTime.now(); // 当前日期时间和时区
    
    OffsetDateTime: 是带有偏移量的日期时间,它表示相对于协调世界时(UTC)的偏移。
    OffsetDateTime offsetDateTime = OffsetDateTime.now(); // 当前日期时间和偏移
    

4. 设计哲学

  • java.util.Date 和相关的类在设计上存在一些问题,例如线程安全性等,并且在新的 Java 版本中被认为是过时的。
  • java.time 包中的类是在 JSR-310 规范下设计的,提供了更清晰、类型安全和易用的 API。


在 Java 8 及更高版本中,建议使用 java.time 包中的类进行日期和时间的处理,以充分利用其更现代、更健壮的功能。

你可能感兴趣的:(Java学习,java,开发语言)