沉梦听雨的编程指南 沉梦听雨的编程指南
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)

沉梦听雨

时间是最好的浸渍剂,而沉淀是最好的提纯器🚀
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)
  • 设计须知

    • 命名规范
    • 聊聊什么是耦合度
    • 幂等性问题分析
    • LocalDateTime和DateTime
      • 为什么建议使用 LocalDateTime 来替换 DateTime ?
      • LocalDateTime
        • 主要特点
        • 示例代码
      • java.util.Date 和 java.util.Calendar
        • 主要特点
        • 示例代码
      • 对比分析
      • 结论
    • 那些关于管理系统的知识
    • 唯一索引和逻辑删除冲突解决方法
    • 日志记录相关
  • UML画图

  • 权限校验

  • 设计模式

  • 系统设计
  • 设计须知
沉梦听雨
2024-10-13
目录

LocalDateTime和DateTime

# LocalDateTime 和 DateTime

# 为什么建议使用 LocalDateTime 来替换 DateTime ?

在现代的 Java 开发中,LocalDateTime 是推荐使用的日期时间类之一,尤其是在处理不带时区信息的日期和时间时。下面是对 LocalDateTime 和 java.util.Date(以及 java.util.Calendar)的一些分析,帮助你更好地理解它们之间的区别和使用场景。

# LocalDateTime

LocalDateTime 是 Java 8 引入的 java.time 包中的一个类。它用于表示不带时区的日期和时间,通常用于不需要考虑时区的应用场景。

# 主要特点

  • 不可变性:LocalDateTime 是不可变的,这意味着一旦创建,其值不能被改变。这使得它更适合并发环境。
  • 丰富的API:提供了丰富的方法来操作日期和时间,如加减天数、月份、年份等。
  • 线程安全:由于其不可变性,LocalDateTime 是线程安全的。
  • 易于使用:API 设计更加直观和易于使用,减少了出错的可能性。

# 示例代码

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

public class LocalDateTimeExample {
    public static void main(String[] args) {
        // 获取当前日期和时间
        LocalDateTime now = LocalDateTime.now();
        System.out.println("Current Date and Time: " + now);

        // 格式化输出
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String formattedDateTime = now.format(formatter);
        System.out.println("Formatted Date and Time: " + formattedDateTime);

        // 操作日期时间
        LocalDateTime futureDate = now.plusDays(10).plusHours(2);
        System.out.println("Future Date and Time: " + futureDate);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# java.util.Date 和 java.util.Calendar

java.util.Date 和 java.util.Calendar 是 Java 早期版本中用于处理日期和时间的类。尽管它们仍然广泛使用,但在 Java 8 及以后的版本中,建议使用 java.time 包中的新类。

# 主要特点

  • 可变性:Date 和 Calendar 是可变的,这意味着它们的状态可以在创建后被修改。
  • 复杂的API:Calendar 的 API 相对复杂且容易出错,不如 java.time 包中的类直观。
  • 非线程安全:Date 和 Calendar 不是线程安全的,需要额外的同步措施来保证线程安全。

# 示例代码

import java.util.Calendar;
import java.util.Date;
import java.text.SimpleDateFormat;

public class DateExample {
    public static void main(String[] args) {
        // 获取当前日期和时间
        Date now = new Date();
        System.out.println("Current Date and Time: " + now);

        // 格式化输出
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String formattedDateTime = formatter.format(now);
        System.out.println("Formatted Date and Time: " + formattedDateTime);

        // 操作日期时间
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(now);
        calendar.add(Calendar.DAY_OF_MONTH, 10);
        calendar.add(Calendar.HOUR_OF_DAY, 2);
        Date futureDate = calendar.getTime();
        System.out.println("Future Date and Time: " + futureDate);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

# 对比分析

特性 LocalDateTime java.util.Date / java.util.Calendar
不可变性 是 否
线程安全 是 否
API 易用性 高,方法丰富且直观 低,方法复杂且容易出错
时区支持 无(需配合 ZonedDateTime) 有(通过 TimeZone)
性能 现代优化较好 传统实现,性能稍逊
兼容性 Java 8 及以上 所有 Java 版本

# 结论

  • 推荐使用 LocalDateTime:如果你正在使用 Java 8 或更高版本,并且不需要处理时区信息,强烈推荐使用 LocalDateTime。它的不可变性和丰富的 API 使得代码更简洁、更易维护。
  • 时区处理:如果你需要处理时区信息,可以使用 ZonedDateTime 或 OffsetDateTime。
  • 向后兼容:如果你的项目需要与旧代码或库保持兼容,可能仍然需要使用 java.util.Date 和 java.util.Calendar。但你可以通过 java.time 包中的转换工具(如 Instant 和 Date.from(...))来桥接新旧代码。

总之,LocalDateTime 是现代 Java 开发中的首选日期时间类,特别是在处理本地日期和时间时。

上次更新: 2024/10/13 22:28:46
幂等性问题分析
那些关于管理系统的知识

← 幂等性问题分析 那些关于管理系统的知识→

Theme by Vdoing | Copyright © 2023-2025 沉梦听雨 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式