一次理清楚Java中的日期和时间

ops/2025/1/21 17:18:44/

Java中的日期和时间

概述

        学习最大的问题困难在于沉下心,现实社会纷乱复杂,充满诱惑,同时随着成家立业年岁增长更无当年之志,顿感无力。回想公瑾当年之言:“日抚谣琴听音,夜有娇妻伴读,此生足矣。” 然而兵败,乃叹曰:“深感人生之艰难,就像那不息之长河,虽有东去大海之志,却流程缓慢,征程多艰。然江河水总有入海之时,而人生之志,却常常难以实现,令人抱恨终生!”,这句话让人感慨颇深。

日期时间类对比分析

        日期在每天的开发中都会用到,本篇文章意在通过汇总讲解的方式让读者能够一次理清楚Java中的日期和时间,这里主要会讲解Date类、DateFormat类、Calendar类、 LocalDateTime类。

        Java8之前我们都是使用Date日期类来处理时间,这里其实还有一个要对比的就是jdk中有两个Date类,分别是:java.util.Date和java.sql.Date

由源码可以看出java.sql.Date继承自java.util.Date,一般我们在记录日期的时候不建议使用sql包下的Date,因为java.sql.Date只是记录年月日,这里做了一个小的对比:

输出结果如下所示:

        可以得出如下结论,java.util.Date直接输出的话格式不好阅读,需要使用SimpleDateFormat来格式化,然而SimpleDateFormat并非线程安全的,翻看源码可以看到java.util.Date中大部分方法目前已经废弃了。

        JDK1.1推出了Calendar类,用来代替Date类中得到年、月、日、小时等时间元素的api,Calendar提供了一系列获取时间元素的api,并且使用起来也比较简单,通过Calendar.getInstance()获取到Calendar对象,调用一系列API得到时间元素,代码如下:

Calendar 类通常用于执行日期和时间计算

Date 存在如下的不足:

时区问题: Date 类不处理时区信息,它只表示一个时间点,通常默认为 GMT(格林威治标准时间)。这导致了很多时区相关的问题,因为日期和时间需要根据时区进行转换和显示。
线程不安全性: Date 类是可变的。由于 Java 中的日期和时间操作通常需要是线程安全的,这种可变性可能导致并发问题。

因为上述问题,Java 引入了新的日期和时间 API,如 java.time 包,它提供了更强大和安全的日期和时间处理能力。如果你在项目中需要处理日期和时间,建议使用新的日期和时间 API,如 LocalDateTime、ZonedDateTime 等,以避免 Date 类的问题。

LocalDateTime满足了线程安全性和时区支持:

线程安全性java.time.LocalDateTime 是不可变的,一旦创建了对象,它的值不能被修改。这保证了在多线程环境中使用时不会出现并发问题。


时区支持: LocalDateTime 提供了更好的时区支持。它存储日期和时间信息,但不包含时区信息。这允许你在需要时将日期时间信息与特定时区相关联,而不会像 java.util.Date 那样受限于默认时区(通常是 GMT)。你可以使用 ZoneId 来将 LocalDateTime 转换为特定时区的时间,例如:

LocalDateTime localDateTime = LocalDateTime.now();
ZoneId zoneId = ZoneId.of("America/New_York");
ZonedDateTime zonedDateTime = localDateTime.atZone(zoneId);

总结

        日期和时间类应该是每天都会打交道的,但是很多人一直都没理清楚Java中的日期和时间类,本文意在对比Java中各日期时间类,从而分析清楚我们在日常研发中该如何选用,希望给本文能给大家带来收获。


    http://www.ppmy.cn/ops/151957.html

    相关文章

    MCU中的LSB、MSB和大端模式、小端模式

    第一章 LSB和MSB 1.1 最低有效位(Least Significant Bit, LSB) 红外接收器接收了0x45(0100 0101)之后,怎么将这个数据发送给MCU; LSB(least significant bit):最低有效位优先,例如红外通信是以…

    .Net Core webapi 实现JWT认证

    文章目录 需求准备创建JWT配置创建JWTService注册JWT创建中间件读取jwt的token在需要的接口上添加属性启动认证启动swagger的授权认证使用 需求 实现一个记录某个用户所有操作的功能 准备 创建你的webapi项目从nuget下载安装JWT资源包根据你的项目使用.net版本下载对应的jwt…

    Kotlin Bytedeco OpenCV 图像图像57 图像ROI

    Kotlin Bytedeco OpenCV 图像图像57 图像ROI 1 添加依赖2 测试代码3 测试结果 1 添加依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns"http://maven.apache.o…

    使用 HTML 开发 Portal 页全解析

    前言 在当今数字化时代&#xff0c;网站作为企业和个人展示信息、提供服务的重要窗口&#xff0c;其重要性不言而喻。而 Portal 页&#xff0c;作为网站的核心页面之一&#xff0c;承担着引导用户、整合信息等关键任务。那么&#xff0c;如何使用 HTML 开发一个功能齐全、界面…

    【HarmonyOS NAPI 深度探索11】搭建 NAPI 开发环境:HarmonyOS DevEco Studio 全指南

    【HarmonyOS NAPI 深度探索11】搭建 NAPI 开发环境&#xff1a;HarmonyOS DevEco Studio 全指南 在开始 NAPI 开发之前&#xff0c;一个高效、完善的开发环境是成功的第一步。对于 HarmonyOS 开发者来说&#xff0c;DevEco Studio 是最推荐的开发工具&#xff0c;它为 Harmony…

    【开源免费】基于SpringBoot+Vue.JS夕阳红公寓管理系统(JAVA毕业设计)

    本文项目编号 T 146 &#xff0c;文末自助获取源码 \color{red}{T146&#xff0c;文末自助获取源码} T146&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

    基于Python机器学习的双色球数据分析与预测

    python统计分析2003-2024年所有的中奖记录,通过人工智能机器学习预测双色球,个人意见,仅供参考. 声明&#xff1a;双色球具有随机性&#xff0c;任何工具无法预测。本文章仅作为技术交流&#xff0c;提供学习参考。本文所涉及的代码均为python之机器学习的代码。双色球为公益事…

    C++学习第五天

    创作过程中难免有不足&#xff0c;若您发现本文内容有误&#xff0c;恳请不吝赐教。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、构造函数 问题1 关于编译器生成的默认成员函数&#xff0c;很多童鞋会有疑惑&#xff1a;不实现构造函数的情况下…