datetime 和LocalDateTime 的区别

在 Java 中,java.util.Date(或 java.sql.Timestamp)和 java.time.LocalDateTime 是两种不同的日期时间类,主要区别如下:

特性 Date LocalDateTime
时区 隐式依赖系统时区 无时区
线程安全 否 是
可变性 可变 不可变
API 设计 老旧 现代且易用
推荐度 旧代码兼容时使用 优先选择
建议:在新项目中尽量使用 java.time 包(如 LocalDateTime),避免 Date 和 Calendar。
1. 所属包与版本
类 所属包 引入版本 设计理念
Date java.util Java 1.0 旧版 API,存在设计缺陷(如非线程安全)
LocalDateTime java.time Java 8 (JSR-310) 新版 API, immutable(不可变)且线程安全

2. 时区处理
类 时区敏感性 说明
Date 隐式依赖系统时区 内部存储 UTC 时间戳(毫秒数),但 toString() 会按系统时区显示
LocalDateTime 无时区信息 仅表示本地日期时间(如 2025-05-07T14:30:00),不涉及时区转换
示例对比
/

/ Date 的时区依赖(输出受系统默认时区影响)
Date date = new Date();
System.out.println(date); // 输出类似:Wed May 07 14:30:45 CST 2025

// LocalDateTime 无时区
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime); // 输出类似:2025-05-07T14:30:45.123

3. 可变性
类 可变性 线程安全
Date 可变(可通过 setTime() 修改) 非线程安全
LocalDateTime 不可变(所有修改操作返回新对象) 线程安全
示例

// Date 可变(不推荐)
Date date = new Date();
date.setTime(1000L); // 直接修改原始对象

// LocalDateTime 不可变
LocalDateTime now = LocalDateTime.now();
LocalDateTime future = now.plusHours(1); // 返回新对象,原对象不变

4. 功能丰富度
功能 Date LocalDateTime
日期加减 需手动计算(如 Calendar) 内置方法(如 plusDays()、minusHours())
格式化 依赖 SimpleDateFormat(非线程安全) 使用 DateTimeFormatter(线程安全)
时间单位支持 仅精确到毫秒 支持纳秒级精度
操作对比

// Date 的日期加减(繁琐)
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, 1);
Date tomorrow = calendar.getTime();

// LocalDateTime 的日期加减(简洁)
LocalDateTime tomorrow = LocalDateTime.now().plusDays(1);
  1. 适用场景
    场景 推荐类 原因
    旧代码兼容 Date 历史遗留系统可能依赖 Date
    数据库交互 java.sql.Timestamp 兼容 JDBC 驱动
    新开发项目 LocalDateTime 更安全、更易用
    需要时区 ZonedDateTime 明确处理时区逻辑

  2. 相互转换

Date → LocalDateTime
Date date = new Date();
LocalDateTime localDateTime = date.toInstant()
    .atZone(ZoneId.systemDefault())
    .toLocalDateTime();
LocalDateTime → Date
LocalDateTime localDateTime = LocalDateTime.now();
Date date = Date.from(
    localDateTime.atZone(ZoneId.systemDefault()).toInstant()
);
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思静鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值