当前位置: 首页 > news >正文

Java 中的 LocalDateTime、DateTime 和 Date 的区别解析

目录

前言

一、LocalDateTime:新的 Java 8 日期时间 API

1.1 LocalDateTime 简介

1.2 设计理念

1.3 适用场景

1.4 示例代码

二、DateTime:没有明确标准的类

2.1 DateTime 的模糊性

2.2 适用场景

三、Date:老旧的日期时间类

3.1 Date 简介

3.2 设计缺陷

3.3 适用场景

3.4 示例代码

四、如何选择合适的日期时间类?


前言

hello 哥们,又碰见问题了。最近在写项目定义 createTime 和 updateTime 这类时间有关的属性时,我脑子里出现三个类, LocalDateTime、DateTime 和 Date  说起来,我确实有点分不清这三个类,于是特地去查了一下,于是有了此篇博客。

在 Java 中,处理日期和时间是开发中常见的任务之一,特别是在涉及到多个时区、日期格式、时间计算等需求时。Java 提供了多种方式来处理日期和时间,其中 LocalDateTimeDateTimeDate 是三种常见的日期时间类。尽管它们看起来有些相似,但它们的设计理念和应用场景却各有不同。本文将深入分析这三者的区别,帮助大家更好地理解它们的使用场景。


一、LocalDateTime:新的 Java 8 日期时间 API

1.1 LocalDateTime 简介

LocalDateTime 是 Java 8 中引入的 java.time 包的一部分,它代表了没有时区信息的日期和时间。它只包含 年、月、日、时、分、秒、纳秒 信息,不涉及与时区或具体的时间点相关的数据。

1.2 设计理念

LocalDateTime 设计的目标是解决传统 java.util.Date 类中存在的许多问题,提供一个清晰、直观的 API 来处理日期和时间。由于它没有时区信息,它非常适合表示 本地时间,例如在某个特定地点的时间,且不受时区转换的影响。

1.3 适用场景

  • 本地日期时间处理:例如,我们只关心某个事件发生的日期和时间,但不关心该事件发生的时区。
  • 与数据库交互:当你存储和操作不涉及时区的日期时间(比如某些日历系统或事务记录)时,LocalDateTime 是一个理想的选择。

1.4 示例代码

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("当前本地日期时间: " + now);// 格式化输出DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");System.out.println("格式化后的日期时间: " + now.format(formatter));}
}

输出结果:

当前本地日期时间: 2024-11-13T12:45:30.123456789
格式化后的日期时间: 2024-11-13 12:45:30

二、DateTime:没有明确标准的类

2.1 DateTime 的模糊性

在 Java 标准库中,并没有直接命名为 DateTime 的类。通常,在一些库或框架中,DateTime 用来指代 日期和时间的组合。例如,Java 8 的 ZonedDateTimeLocalDateTime 都可能被通称为 DateTime,尽管它们是不同的类。

因此,DateTime 并没有明确的标准定义,通常只是作为一个通用术语,用来描述所有涉及日期和时间的类。

2.2 适用场景

  • 在一些第三方库(如 Joda-Time)或框架中,DateTime 被广泛用于表示日期和时间。如果使用这些库,可能会遇到 DateTime 这个类。
  • 在 Java 中,如果遇到 DateTime,我们可能需要进一步查看它具体是哪个类,例如 ZonedDateTime 或 OffsetDateTime

三、Date:老旧的日期时间类

3.1 Date 简介

java.util.Date 是 Java 中最早的日期和时间类之一。它代表自 1970 年 1 月 1 日 00:00:00 UTC 以来的毫秒数,直到 Java 8 被新的日期时间 API 取代。Date 类最初设计上存在诸多缺陷,因此不再推荐用于新的项目开发。

3.2 设计缺陷

  • 时区问题Date 类本身并不包含时区信息,且会根据所在的系统时区进行转换,导致时区处理不够精确。
  • 不便的 API:许多方法(如 getYear())的返回值并不直观,而且对日期的操作不便,缺少流畅的日期计算方法。
  • 精度不足Date 的精度仅限于毫秒,不能处理纳秒级别的时间。

3.3 适用场景

  • 兼容旧代码:如果你需要与旧版的 API 进行交互,Date 可能仍然是不可避免的。
  • 时间戳:由于 Date 内部使用毫秒表示时间,因此它仍然适用于一些需要表示时间戳的场景。

3.4 示例代码

import java.util.Date;public class DateExample {public static void main(String[] args) {Date date = new Date();  // 获取当前日期和时间System.out.println("当前日期时间: " + date);}
}

输出结果:

当前日期时间: Wed Nov 13 12:45:30 GMT 2024

四、如何选择合适的日期时间类?

特性LocalDateTimeDateTime(通常指 ZonedDateTimeOffsetDateTime 等)Date(旧的 java.util.Date
时区信息无时区信息ZonedDateTime 有时区信息,LocalDateTime 没有时区信息Date 依赖于系统时区
精确度纳秒精度视具体类型而定,如 ZonedDateTime 支持到纳秒精度毫秒精度
设计方式Java 8 引入的新日期时间 API,推荐使用DateTime 不是标准类,通常是指 LocalDateTime 或 ZonedDateTime 等旧的 API,设计不够清晰,容易出错
功能只包含日期和时间,没有时区包含日期和时间,可以有时区(如 ZonedDateTime仅表示一个时间点,设计较为原始
使用推荐推荐用于不需要时区的日期时间操作ZonedDateTime 或 OffsetDateTime 用于处理带时区的日期时间不推荐使用,除非需要兼容旧代码

1. LocalDateTime:适用于本地日期和时间的场景,不需要时区处理。

2. ZonedDateTime:适用于需要时区处理的场景,适合跨时区的日期时间计算。

3. Date:仅在兼容旧代码或需要处理时间戳时使用,不推荐在新项目中使用。

在 Java 8 之后,我更推荐使用新的日期时间 API(java.time 包中的类),这些类设计更加清晰,功能更强大,避免了 java.util.Date 中的很多问题。以上就是关于这三个日期时间类的所有内容,感谢阅览!!

相关文章:

Java 中的 LocalDateTime、DateTime 和 Date 的区别解析

目录 前言 一、LocalDateTime:新的 Java 8 日期时间 API 1.1 LocalDateTime 简介 1.2 设计理念 1.3 适用场景 1.4 示例代码 二、DateTime:没有明确标准的类 2.1 DateTime 的模糊性 2.2 适用场景 三、Date:老旧的日期时间类 3.1 Da…...

MATLAB引用矩阵元素的几种方法

引用矩阵元素可以通过索引,也可以通过逻辑值 索引 通过引用元素在矩阵中的位置来提取元素,例如: - 逻辑值 通过某种逻辑运算来使得要提取的值变为逻辑 1 1 1,用 A ( ) A() A()提取即可, A A A为原矩阵的名称。 例如&…...

Linux、File System、Linux基本常用命令

一、File System 文件系统 Linux文件系统是操作系统用来组织、管理和存储问价及目录结构的方式。它不仅定义了如何将数据保存到磁盘上,还规定了用户如何与这些数据进行交互。 1、层次结构 根目录(/):所有文件和目录都从根目录开始…...

大数据治理:开启数据价值挖掘之旅

在当今数字化时代,数据呈爆炸式增长,大数据已经渗透到各个行业和领域,成为企业竞争和创新的关键驱动力。而大数据治理作为有效管理和利用大数据资源的核心手段,在教学领域也具有至关重要的地位。 一、大数据治理的内涵与重要性 大…...

Linux排查cpu运行负载过高

方式1:top 先输入top再输入1,查看 %CPU 列,找出占用 CPU 最多的进程 作用:切换显示每个逻辑 CPU 的使用情况。效果: 如果系统有多个 CPU 核心或超线程逻辑处理器,按下 1 会使得 top 分别显示每个逻辑 CPU…...

Cobalt Strike 4.8 用户指南-第十四节 Aggressor 脚本

14.1、什么是Aggressor脚本 Aggressor Script 是Cobalt Strike 3.0版及更高版本中内置的脚本语言。Aggressor 脚本允许你修改和扩展 Cobalt Strike 客户端。 历史 Aggressor Script 是 Armitage 中开源脚本引擎Cortana的精神继承者。Cortana 是通过与 DARPA 的网络快速跟踪计…...

C++并发与多线程(高级函数async)

async 在 C 中,async 关键字用于实现异步编程,它允许你定义异步操作,这些操作可以在后台执行,而不会阻塞当前线程。这是 C11 引入的特性,与 std::async 函数和 std::future 类一起使用。与thread函数模板的区别在于as…...

安卓课设版算法计算器

安卓课设版算法计算器(HNUST) 前言: 如果只想看函数使用说明请跳转到“四、使用函数介绍” 该版本为课设版,富含多个界面,是前版的plus版本,进行了更多的复杂化操作,故因此会觉得对于计算器有点…...

X-Forwarded-For注入漏洞

0x00环境介绍 靶机http://219.153.49.228:48033,通过注入完成找到网站的key。 1|00x01复现过程 1.访问网站使用admin/admin登入,用burpsuite截包寻找注入点 >>截到的包,正常放包回显内容 >>加X-forwarded-for:1.1.1.1回显IP数据改变&…...

Linux - MySQL迁移至一主一从

Linux - MySQL迁移至一主一从 迁移准备安装MySQL ibd文件迁移原服务器操作目标服务器操作 一主一从增量同步异常解决结尾 首先部分单独安装MySQL,请参考Linux - MySQL安装,迁移数据量比较大约400G左右且网络不通故使用文件迁移,需开启一段时间…...

《变形金刚:赛博坦的陨落》游戏启动难题:‘buddha.dll’缺失的七大修复策略

《变形金刚:赛博坦的陨落》游戏启动时提示buddha.dll缺失:原因与解决方案 作为一名软件开发从业者,我在日常工作中经常遇到电脑游戏运行时出现的各种问题,如文件丢失、文件损坏和系统报错等。今天,我们就来探讨一下《…...

51c嵌入式~单片机~合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/12362395 一、不同的电平信号的MCU怎么通信? 下面这个“电平转换”电路,理解后令人心情愉快。电路设计其实也可以很有趣。 先说一说这个电路的用途:当两个MCU在不同的工作电压下工作&a…...

java Resource 记录

Java 注解 Resource 是一个标准的 Java 注解,用于注入资源。它可以用于注入任何资源,如文件、数据库连接、用户定义的资源等。它可以通过名称或类型进行注入。 当你想要注入一个bean到你的类中时,你可以使用Resource注解。 解决方案1&#…...

Avalonia 开发环境准备

总目录 前言 介绍如何搭建 Avalonia 开发环境。 一、在线开发环境搭建 请先安装您选择的受支持的IDE。Avalonia 支持 Visual Studio、Rider 和 Visual Studio Code。 详见:https://docs.avaloniaui.net/zh-Hans/docs/get-started/install 1. 使用 Visual Studio 20…...

C# 中 Console.WriteLine($“{DateTime.Now.Date}“); win 和 docker容器输出不同

Console.WriteLine($"{DateTime.Now.Date}"); //windowns输出:2024/12/10 0:00:00 //docker容器输出:12/10/2024 00:00:00 这是由于 不同的文化区域(CultureInfo)设置 导致的时间格式差异。在 Windows 系统…...

回型矩阵:JAVA

解题思路: 通过定义四条边界;top,left,right,bottom,来循环,当top>bottom&&left>right的时候循环终止 循环结束的条件: 链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述…...

从零开始学习 sg200x 多核开发之 sophpi 编译生成 fip.bin 流程梳理

本文主要介绍 sophpi 编译生成 fip.bin 流程。 1、编译前准备 sophpi 的基本编译流程如下: $ source build/cvisetup.sh $ defconfig sg2002_wevb_riscv64_sd $ clean_all $ build_all $ pack_burn_image注: 需要在 bash 下运行clean_all 非必要可以不…...

python--在服务器上面创建conda环境

今天刚开始使用服务器的时候使用上面的公共环境发现老师缺少模块&#xff0c; [guoyupingcins195 ~]$ conda --version Traceback (most recent call last): File "/home/miniconda3/bin/conda", line 12, in <module> from conda.cli import main Fil…...

day15 python(3)——python基础(完结!!)

【没有所谓的运气&#x1f36c;&#xff0c;只有绝对的努力✊】 目录 1、函数 1.1 函数传参中的拆包 1.2 匿名函数的定义 1.3 匿名函数练习 1.4 匿名函数应用——列表中的字典排序 2、面向对象 OOP 2.1 面向对象介绍 2.2 类和对象 2.3 类的构成和设计 2.4 面向对象代码…...

/:087启动游戏时提示丢失”d3dx···.dll””VCOMP···.dll”

/:087启动游戏时提示丢失”d3dx.dll””VCOMP.dll”或遇到应用程序无法正常启动&#xff08;0xc000007b&#xff09;和游戏有图像没有声音等情况。 主要是因为系统缺少大型游戏/软件运行的必备组件&#xff0c;这些组件有DirectX&#xff0c;Visual C2010&#xff0c;2012&…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...