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

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.rhkb.cn/news/4763.html

    如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    Linux探秘坊-------3.开发工具详解(2)

    1.动静态库和动静态链接(操作) 静态库是指编译链接时,把库⽂件的代码全部加⼊到可执⾏⽂件中,因此⽣成的⽂件 ⽐较⼤,但在运⾏时也就不再需要库⽂件了。其后缀名⼀般为“.a” 动态库与之相反,在编译链接时并 没有把库⽂件的代码加⼊到可执⾏⽂件中 ,⽽…

    亲测有效!如何快速实现 PostgreSQL 数据迁移到 时序数据库TDengine

    小T导读:本篇文章是“2024,我想和 TDengine 谈谈”征文活动的优秀投稿之一,作者从数据库运维的角度出发,分享了利用 TDengine Cloud 提供的迁移工具,从 PostgreSQL 数据库到 TDengine 进行数据迁移的完整实践过程。文章…

    C语言:位段

    位段的内存分配: 1. 位段的成员可以是 int unsigned int signed int 或者是char (属于整形家族)类型 2. 位段的空间上是按照需要以4个字节( 类型 int )或者1个字节( char )的方式来开辟的。 3. 位段涉及…

    多级缓存 JVM进程缓存

    目录 多级缓存 1.什么是多级缓存 2.JVM进程缓存 2.1 导入案例 2.2 初识Caffeine 2.3 实现JVM进程缓存 2.3.1 需求 2.3.2 实现 3.Lua语法入门 3.1 初识Lua 3.1 HelloWorld 3.2.变量和循环 3.2.1 Lua的数据类型 3.2.3 循环 3.3 条件控制、函数 3.3.1 函数 3.3.2 条件控制 3.3.3 案…

    记录一下OpenCV Contrib 编译踩的坑

    最近有需要采用OpenCV Contrib 里面的函数做一下处理,要重新编译,一路编译两三个小时了,记录一下备忘吧。 1、编译前先准备好如下环境 ①visual studio已安装,具体版本和型号根据需求经验来,我看常用的是VS2015、VS201…

    每日一刷——1.20——准备蓝桥杯

    链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目一 请统计某个给定范围[L, R]的所有整数中,数字2出现的次数。 比如给定范围[2, 22],数字2在数2中出现了1次,在数12中出现1次,在数20中出现1次&a…

    整数的分离与合成

    整数的分离与合成 一、整数的分离1.1 整数拆成数字的方法1.1.1 取尾法1.1.2 取头法 1.2 任意整数的分离 二、整数的合成 整数是由数字和数位组成的,比如327是一个三位数,它的数字是3、2、7,数位是个数、十位、百位。 经常有些题目考查将一个整数拆分成各…

    动态规划(多状态)

    面试题 17.16. 按摩师 面试题 17.16. 按摩师 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int massage(vector<int>& nums) {int n nums.size();//特殊情况&#xff1a;空数组if(n0)return 0;vector<int> f(n);vector<int> g(n);…

    【json_object】mysql中json_object函数过长,显示不全

    问题&#xff1a;json只显示部分 解决&#xff1a; SET GLOBAL group_concat_max_len 1000000; -- 设置为1MB&#xff0c;根据需要调整如果当前在navicat上修改&#xff0c;只有效本次连接和后续会话&#xff0c;重新连接还是会恢复默认值1024 在my.ini配置文件中新增或者修…

    ElasticSearch DSL查询之高亮显示

    什么是高亮显示&#xff1f; 高亮显示是指在搜索结果中&#xff0c;将用户搜索的关键字突出显示&#xff0c;使其更为醒目。以百度搜索为例&#xff0c;当用户搜索“JAVA”时&#xff0c;搜索结果中的标题或概述部分会将“JAVA”高亮显示&#xff0c;通常以红色标出&#xff0…

    WGAN - 瓦萨斯坦生成对抗网络

    1. 背景与问题 生成对抗网络&#xff08;Generative Adversarial Networks, GANs&#xff09;是由Ian Goodfellow等人于2014年提出的一种深度学习模型。它包括两个主要部分&#xff1a;生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discriminator&#xff09;…

    低代码系统-产品架构案例介绍(五)

    接上篇&#xff0c;某搭介绍。 某搭以低代码为核心驱动&#xff0c;利用AI能力强势推动应用深度体验&#xff0c;打通钉钉对接&#xff0c;且集成外部系统。 可以看出&#xff0c;某搭在未来的规划上&#xff0c;着重在于AI 也就说明&#xff0c;低代码产品在未来的竞争上&…

    嵌入式知识点总结 ARM体系与架构 专题提升(一)-硬件基础

    嵌入式知识点总结 ARM体系与架构 专题提升(一)-硬件基础 目录 1.NAND FLASH 和NOR FLASH异同 ? 2.CPU,MPU,MCU,SOC,SOPC联系与差别? 3.什么是交叉编译&#xff1f; 4.为什么要交叉编译&#xff1f; 5.描述一下嵌入式基于ROM的运行方式和基于RAM的运行方式有什么区别? 1…

    学习记录之原型,原型链

    构造函数创建对象 Person和普通函数没有区别&#xff0c;之所以是构造函数在于它是通过new关键字调用的&#xff0c;p就是通过构造函数Person创建的实列对象 function Person(age, name) {this.age age;this.name name;}let p new Person(18, 张三);prototype prototype n…

    迈向 “全能管家” 之路:机器人距离终极蜕变还需几步?

    【图片来源于网络&#xff0c;侵删】 这是2024年初Figure公司展示的人形机器人Figure 01&#xff0c;他可以通过观看人类的示范视频&#xff0c;在10小时内经过训练学会煮咖啡&#xff0c;并且这个过程是完全自主没有人为干涉的&#xff01; 【图片来源于网络&#xff0c;侵删】…

    海康工业相机的应用部署不是简简单单!?

    作者&#xff1a;SkyXZ CSDN&#xff1a;SkyXZ&#xff5e;-CSDN博客 博客园&#xff1a;SkyXZ - 博客园 笔者使用的设备及环境&#xff1a;WSL2-Ubuntu22.04MV-CS016-10UC 不会吧&#xff1f;不会吧&#xff1f;不会还有人拿到海康工业相机还是一脸懵叭&#xff1f;不会还有人…

    【自动控制原理】非线性系统 描述函数法 相平面法

    写在前面&#xff08;叠甲&#xff09;&#xff1a; 非线性是控制科学中重要的一个研究方向&#xff0c;它所包含的理论远远超过自动控制原理中的内容。在本文中&#xff0c;所介绍的内容仍然在《自动控制原理》框架内&#xff0c;所以只介绍了自控原理课程中涉及的非线性问题&…

    three.js实现裸眼双目平行立体视觉

    three.js实现裸眼双目平行立体视觉原理&#xff1a; 利用两个相机、两个渲染器&#xff0c;同时渲染同一个场景。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"…

    N个utils(sql)

    sql&#xff0c;操作数据库的语言&#xff0c;也可以叫做数据库软件的指令集吧。名字而已&#xff0c;无所谓啦。 本质上&#xff0c;sql并不是java语言内的范畴。但却是企业级开发的范畴。并且我整个文章的一篇逻辑的本质&#xff0c;层的概念&#xff0c;其中一个大的层级就…

    工业网口相机:如何通过调整网口参数设置,优化图像传输和网络性能,达到最大帧率

    项目场景 工业相机是常用与工业视觉领域的常用专业视觉核心部件&#xff0c;拥有多种属性&#xff0c;是机器视觉系统中的核心部件&#xff0c;具有不可替代的重要功能。 工业相机已经被广泛应用于工业生产线在线检测、智能交通,机器视觉,科研,军事科学,航天航空等众多领域 …