Java常用日期类(包含三代)_Date类及Calendar类等
一.java.util.Date类概述
从JDK 1.0出现。
表示一个日期和时间,精确到毫秒,内部getTime()从1970年1月1号开始算。

1. java.util.Date类构造
部份构造已经过时,重点看以下两个构造。
public Date()
从运行程序的此时此刻到时间原点经历的毫秒值,转化成Date类对象,分配Date类对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
public Date(long date)
将指定参数的毫秒值date,转化成Date对象,分配Date对象并初始化此对象,以表示自从标准基准时间(称为历元epoch),即1970年1月1号0点以来指定的毫秒数。
不过具体来说应该是8点,因为中国处于东八区(GMT+08:00)是比世界协调时间/格林尼治时间(GMT)快8个小时的时区,所以当格林尼治标准时间为0:00,东八区标准时间是8:00。
两个构造的使用场景选择
无参构造
可以自动设置当前系统时间的毫秒时刻
long类型的有参构造
可以自定义毫秒时刻。
1s=1000ms。

2.创建一个当前时间的Date对象
public static void main(String[] args) {Date date = new Date();System.out.println(date);//Sat Nov 06 14:11:12 CST 2022
}
打印的时候会自动调用toString方法,Date类进行了重写。
但是打印的格式怎么是外国的这种呢?
应该怎么转换成我们经常看的年月日形式呢?
3. Date类中常用的方法
System.out.println(date.getTime());//1636196765779
获取当前日期对象距离标准基准时间的毫秒值。
这串数字是从1970年1月1号开始算到至今的毫秒值。
有什么用呢?
public void setTime(long time)
设置当前日期对象距离标准基准时间的毫秒值,意味着改变了当前日期对象。
public Boolean after(Date when)
此日期是否在指定日期之后。
public Boolean before(Date when)
此日期是否在指定日期之前。
示例代码:
public static void main(String[] args) {//打印当前日期Date date1 = new Date();System.out.println(date1);//Sat Nov 06 14:11:12 CST 2022//创建以标准基准时间为基准,指定往后偏移1000msDate date2 = new Date(1000);System.out.println(date2);//Thu Jan 01 08:00:01 CST 1970//获取当前日期对象距离标准基准时间的毫秒值System.out.println(date1.getTime());//1636196765779System.out.println(date1.getTime());//1000//修改date1距离标准基准时间的毫秒值为2000date1.setTime(2000);System.out.println(date1);//Thu Jan 01 08:00:02 CST 1970date2.setTime(2000);System.out.println(date2);//Thu Jan 01 08:00:02 CST 1970//创建当前时间的对象Date date3 = new Date();System.out.println("date3的日期是否在date1之前"+date3.before(date1));//falseSystem.out.println("date3的日期是否在date1之后"+date3.after(date1));//true
二. DateFormat类概述
DateFormat是日期/时间格式化子类的’抽象类’
作用:
格式化:(日期——>文本)Date—>String
解析:(文本——>日期)String—>Date
由于DateFormat是一个抽象类,无法创建对象使用,可以使用其子类SimpleDateFormat。这个类需要一个格式(模式)来指定格式化或者解析的标准。
构造方法:
SimpleDateFormat(String pattern):使用给定模式并使用默认语言环境的日期格式符号的构造方法。
参数:
String pattern:代表日期时间的自定义格式。
模式:
字母不能更改,连接符号可以改变。
区分大小写 “yyyy-MM-dd”年月日
“HH:mm:ss” //时分秒
y | 年 |
M | 月 |
d | 日 |
H | 时 |
m | 分 |
s | 秒 |
(区分大小写)
1. DateFormat类常用的方法
public String format(Date date):将Date对象格式化为字符串。
public Date parse(String source):将字符串解析为Date对象。
public static void main(String[] args) {Date date = new Date();SimpleDateFormat sdf=new SimpleDateFormat("yyyy年mm月dd日 HH时mm分ss秒")//格式化format() StringString s=sdf.format(date);System.out.println(s); 2022年04月22日 14时45分49秒---------------------------------//解析String str="2022-04-22 17:09:22"String str1="2022年04月22日 17时09分22秒"//报错,因为sdf格式模板和str格式不一样,无法解析Date date=sdf.parse(str);//正常,格式对上了Date date1=sdf.parse(str1);System.out.println(date); System.out.println(date1);
}
三.java.util.Calendar类
从JDK1.1出现Calendar类后,Date类大部分方法都被弃用了。
Calendar类的功能要比Date类强大,可以方便的进行日期的计算,获取日期中的信息时考虑了时区等问题。且在实现方式上也比Date类要复杂一些。
由于Calendar类是抽象类,且Calendar类的构造方法是protected的,所以无法使用Calendar类构造来创建对象,API提供了getInstance方法用来创建对象。
1.创建一个当前日期的Calendar对象
Calendar calendar = Calendar.getInstance();//默认是当前日期
2.创建一个指定日期的Calendar对象
Calendar calendar = Calendar.getInstance();calendar.set(2021, 5, 9);System.out.println(calendar.getTime());//Wed Jun 09 18:36:09 CST 2021
3.利用set方法设置日期





4.利用字段类型设置
public static void main(String[] args) {Calendar calendar = Calendar.getInstance();calendar.set(Calendar.YEAR,2022);calendar.set(Calendar.MONTH,11);calendar.set(Calendar.DAY_OF_MONTH,1);System.out.println(calendar.getTime());//Mon Dec 01 18:39:22 CST 2022
}
Calendar类中用一下这些常量表示不同意义
Calendar.YEAR——年
Calendar.MONTH——月
Calendar.DATE——日
Calendar.DAY_OF_MONTH——日期,和上面的字段意义一样
Calendar.HOUR——12小时制小时
Calendar.HOUR_OF_DAY——24小时制小时
Calendar.MINUTE——分
Calendar.SECOND——秒
Calendar.DAY_OF_WEEK——周几
5.利用add方法设置日期
官方解释:
* Adds or subtracts the specified amount of time to the given calendar field,
* based on the calendar's rules. For example, to subtract 5 days from
* the current time of the calendar, you can achieve it by calling:
* <p><code>add(Calendar.DAY_OF_MONTH, -5)</code>.
博主解释:
在原本的日期上继续加日期。

public static void main(String[] args) {Calendar calendar = Calendar.getInstance();calendar.set(Calendar.YEAR,2022);//2022年calendar.set(Calendar.MONTH,11);//11月calendar.set(Calendar.DAY_OF_MONTH,6);//6号calendar.add(Calendar.DAY_OF_MONTH,1);//往后加了一天,变成7号System.out.println(calendar.getTime());//Wed Dec 07 18:42:25 CST 2022
}
6.利用get方法获取日期
博主解释:
获取Calendar对象的年月日等日期参数。

public static void main(String[] args) {Calendar calendar = Calendar.getInstance();calendar.set(Calendar.YEAR,2022);calendar.set(Calendar.MONTH,7);calendar.set(Calendar.DAY_OF_MONTH,1);calendar.add(Calendar.DAY_OF_MONTH,2);System.out.println(calendar.get(Calendar.YEAR));//2022System.out.println(calendar.get(Calendar.MONTH));//7System.out.println(calendar.get(Calendar.DAY_OF_MONTH));//3
}
四.类型转化
1、Date与long
public static void main(String[] args) {Date date = new Date();long time = date.getTime();
}
2、Calendar与long
public static void main(String[] args) {Calendar calendar = Calendar.getInstance();calendar.set(Calendar.YEAR,2021);calendar.set(Calendar.MONTH,11);calendar.set(Calendar.DAY_OF_MONTH,6);calendar.add(Calendar.DAY_OF_MONTH,2);long timeInMillis = calendar.getTimeInMillis();
}
3、Date与Calendar互转
(1)Date转Calendar
public static void main(String[] args) {Date date = new Date();Calendar calendar = Calendar.getInstance();calendar.setTime(date);
}
(2)Calendar转Date
public static void main(String[] args) {Calendar calendar = Calendar.getInstance();calendar.set(Calendar.YEAR,2021);calendar.set(Calendar.MONTH,11);calendar.set(Calendar.DAY_OF_MONTH,6);calendar.add(Calendar.DAY_OF_MONTH,2);Date time = calendar.getTime();
}
4、String与Date互转
第二点有讲
5、String与Calendar互转
(1)Calendar 转化 String
public static void main(String[] args) throws ParseException {Calendar calendar = Calendar.getInstance();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");String str = sdf.format(calendar.getTime());
}
(2)String 转化Calendar
public static void main(String[] args) throws ParseException {String str="2021-11-6";SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");Date date =sdf.parse(str);Calendar calendar = Calendar.getInstance();calendar.setTime(date);System.out.println(calendar.getTime());//Sat Nov 06 00:00:00 CST 2021
}
本文一部份借鉴了哪吒博主:
原文链接:https://blog.csdn.net/guorui_java/article/details/121183146
五. java.time.LocalDate, java.time.LocalTime, java.time.LocalDateTime类概述
从JDK 8后加入了第三代日期类,不在util包中了,转移到了time包中。
前面两代日期类的不足分析JDK1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK1.1引入Calendar类之后被弃用了。而Calendar也存在问题是:
1)可变性:像日期和时间这样的类应该是不可变的。
2)偏移性:Date中的年份是从1900开始的,而月份都从0开始。
3)格式化:格式化只对Date有用,Calendar则不行。
4)此外,它们也不是线程安全的;不能处理闰秒等(每隔2天,多出1s)。
LocalDate(日期/年月日)
LocalTime(时间/时分秒)
LocalDateTime(日期时间/年月日时分秒)
LocalDate只包含日期,可以获取日期字段
LocalTime只包含时间,可以获取时间字段
LocalDateTime包含日期+时间,可以获取日期和时间字段。
1.三个类常用方法
// 使用 now() 返回表示当前日期时间的对象
LocalDateTime ldt = LocalDateTime.now(); //LocalDate.now();//LocalTime.now()
System.out.println(ldt);
使用 DateTimeFormatter 对象来进行格式化。
// 创建 DateTimeFormatter 对象
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String format = dateTimeFormatter.format(ldt);
System.out.println("格式化的日期=" + format);
获取对象中的年月日时分秒。
System.out.println("年=" + ldt.getYear());
System.out.println("月=" + ldt.getMonth());
System.out.println("月=" + ldt.getMonthValue());
System.out.println("日=" + ldt.getDayOfMonth());
System.out.println("时=" + ldt.getHour());
System.out.println("分=" + ldt.getMinute());
System.out.println("秒=" + ldt.getSecond());
分别设置日期和时间
LocalDate now = LocalDate.now(); //可以获取年月日
LocalTime now2 = LocalTime.now();//可以获取时分秒
对时间进行加减
//提供 plus 和 minus 方法可以对当前时间进行加或者减
//看看 890 天后,是什么时候 把 年月日-时分秒
LocalDateTime localDateTime = ldt.plusDays(890);
System.out.println("890 天后=" + dateTimeFormatter.format(localDateTime));//看看在 3456 分钟前是什么时候,把 年月日-时分秒输出
LocalDateTime localDateTime2 = ldt.minusMinutes(3456);
System.out.println("3456 分钟前 日期=" + dateTimeFormatter.format(localDateTime2));
2.DateTimeFormatter 格式日期类
类似于SimpleDateFormat。
DateTimeFormat dtf = DateTimeFormatter.ofPattern(格式);
String str = dtf.format(日期对象);
相关文章:

Java常用日期类(包含三代)_Date类及Calendar类等
一.java.util.Date类概述从JDK 1.0出现。表示一个日期和时间,精确到毫秒,内部getTime()从1970年1月1号开始算。1. java.util.Date类构造部份构造已经过时,重点看以下两个构造。public Date()从运行程序的此时此刻到时间原点经历的毫秒值&…...

计算机网络你都懂了吗
文章目录一、计算机网络的定义简单定义通用定义二、计算机网络通信过程三、什么是网络协议(Protocol)四、网络协议组成及功能一、计算机网络的定义 简单定义 计算机网络是一些相互连接的、自治的计算机系统的集合。 通用定义 将处于不同位置并具有独…...

3.4 Spring Boot 日志配置
第3章 Spring Boot 的系统配置 3.1 Spring Boot 系统配置文件 3.2 Spring Boot 自定义配置项 3.3 Spring Boot 其他配置 3.4 Spring Boot 日志配置 3.5 实战:Spring Boot 实现系统多环境配置 3.4 Spring Boot 日志配置 日志对于系统监控、故障定位非常重要…...

3款百里挑一的国产软件,逆天好用,装了就舍不得卸载
推荐3款让你偷懒,让你上头的提效电脑软件,个个功能强大,让你远离加班! 很多几个小时才能做好的事情,用上它们,只需要5分钟就行!! 1、JNPF快速开发平台 JNPF 是一款精巧耐用的软件…...

Java实现在线沟通功能
文章目录1、介绍 和 特点2、整合SpringBoot2.1、导入依赖2.2、websocket 配置类2.3、消息处理类2.4、启动服务2.5、前端代码:张三2.6、前端代码:李四3、效果4、小结1、介绍 和 特点 t-io是基于JVM的网络编程框架,和netty属同类,所…...

识别密文加密类型
离线密码破解:离线不会触发密码锁定机制不会产生大量登录失败日志引起管理员注意HASH识别工具(识别哈希类型):hash-identifierHashid yara规则匹配文件得到特定加密算法一、hash-identifierKali Linux提供工具hash-identifier来识…...

node报错
记录bug:运行 npx -p storybook/cli sb init 时报错gyp info spawn C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exegyp info spawn args [gyp info spawn args build/binding.sln,gyp info spawn args /nologo,gyp info spawn args…...

如何使用开源 BI 工具 DataEase 实现系列数据分析呢?
当我们使用可视化分析工具制作仪表板时,可能需要制作的仪表板不是单个单个的可视化大屏,而是一系列的仪表板,我们需要用它来产生一个连续性的故事,那么这个时候我们该怎么办呢?例如说总分形式,我们需要一个…...

金仓数据库安装
一、麒麟操作系统安装金仓数据库 操作系统 DISTRIB_IDKylin DISTRIB_RELEASEV10 DISTRIB_CODENAMEjuniper 按照安装文档的步骤安装,记得记住设置的数据库的用户名、密码 二、window安装连接数据库的工具软件 三、jdbc连接数据库 (1)连接工…...

深入浅出Webpack2-快速掌握webpack基本配置
深入浅出Webpack2-快速掌握webpack基本配置1.Entry1.1 context1.2 Entry类型2.Output2.1 filename2.2 path3.Module3.1配置Loader4.Resolve4.1 alias4.2 extensions4.3 modules5.Plugin6.DevServer7.其他配置项上一篇文章我们快速上手认识了一下webpack,今天这篇文章…...

如何使评论具有可操作性?取悦客户的指南
永远不要低估承认的力量。 当品牌与客户互动时,认可会带来更好的关系和更好的沟通。与买家和客户建立更多的个人联系意味着品牌需要证明他们支持他们的产品和客户。评论是利用客户分享他们的故事的那些时刻的绝佳机会。 为什么评论在 SaaS 中至关重要 在 B2B 软件的…...

一文带你彻底搞懂Nginx反向代理
一文带你彻底搞懂Nginx反向代理一、什么是反向代理1.1 正向代理1.2 反向代理1.3 总结二、配置反向代理2.1 准备 Tomcat2.2 配置 Nginx一、什么是反向代理 1.1 正向代理 举一个通俗的例子,因为众所周知的原因,我们无法访问谷歌,但是因为某些…...

手写SpringBoot的starter
自定义SpringBoot的starter 引言 starter命名格式: 官方的 starter 的命名格式为 spring-boot-starter-{xxxx} 比如spring-boot-starter-activemq 第三方我们自己的命名格式为 {xxxx}-spring-boot-starter。比如mybatis-spring-boot-starter。 如果我们忽略这种约定…...

pytorch1.2.0+python3.6
一、说明 pytorch1.2.0python3.6CUDA10.0cudnn7.4.1.5 二、步骤 在conda中创建一个新的虚拟环境 查看一下自己的所有环境 激活虚拟环境 conda activate torch1.2.0 关于cuda和cudnn 1、查看自己电脑系统是10.2版本 http://链接:https://pan.baidu.com/s/1v5cN6…...

WindowsPowerShell 停止、启动、暂停和重启服务、卸载服务
PowerShell 停止、启动、暂停和重启服务、卸载服务 PowerShell 停止、启动、暂停和重启服务 官文 powershell卸载服务 官文 目录PowerShell 停止、启动、暂停和重启服务、卸载服务停止、启动、暂停和重启停止服务启动服务暂停服务重启服务卸载移除服务停止、启动、暂停、重启…...

数据库专题
请简洁描述 MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别? 默认隔离级别 mysql repeatable-read oracle read-committed 脏读:不可重复读:幻读: CHAR 和 VARCHAR 的区别?…...

浅谈MySQL索引
目录 1.索引的定义 2.索引的原理 3.Hash索引与B Tree索引 4.索引的分类 5.建立索引的注意事项 1.索引的定义 索引是存储引擎用于快速找到数据记录的一种数据结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。 索…...

安装包UI美化之路-通过nsNiuniuSkin来做Electron程序的打包、发布与升级
nsNiuniuSkin从发布之初,因其简单、简洁、高效,受到了非常多公司的青睐,现在已经越来越多的公司采用我们的这套解决方案来制作安装包了! 从一个安装包UI插件,逐步演化成一套集美观、安全、简洁、自动化为一体的完整的…...

飞鹅打印机怎么样?飞鹅打印机好用吗?飞鹅打印机怎么知道订单是否漏单?
外卖打印机怎么选?飞鹅打印机好用吗?飞鹅智能云打印机产品专注于云打印的解决方案和技术服务提供。2019 年飞鹅已经成为国内先进的云打印服务提供商,主要是服务美团、饿了么客户,产品主要优势:自动接单、自动打印,无需…...

网络协议(八):传输层-TCP(三次握手、四次挥手原理)
网络协议系列文章 网络协议(一):基本概念、计算机之间的连接方式 网络协议(二):MAC地址、IP地址、子网掩码、子网和超网 网络协议(三):路由器原理及数据包传输过程 网络协议(四):网络分类、ISP、上网方式、公网私网、NAT 网络…...

最新OpenMVG编译安装与逐命令运行增量式和全局式SfM教程
openmvg是一个轻便的可以逐步运行的SfM开源库,它同时实现了增量式和全局式两种算法。 说明文档地址:https://openmvg.readthedocs.io/en/latest/ github主页地址:https://github.com/openMVG/openMVG 1 编译安装 openmvg的安装比较简单&…...

数据结构与算法系列之插入排序
💗 💗 博客:小怡同学 💗 💗 个人简介:编程小萌新 💗 💗 如果博客对大家有用的话,请点赞关注再收藏 🌞 什么是插入排序 有一个已经有序的数据序列,要求在这个已经排好的数…...

Text to image论文精读ALR-GAN:文本到图像合成的自适应布局优化
ALR-GAN是北京工业大学学者提出的一种自适应布局优化生成对抗网络,其可以在没有任何辅助信息的情况下自适应地优化合成图像的布局。 文章发表于2023年,IEEE Transactions on Multimedia(TMM)期刊(CCF B,JCR…...

windows版 redis在同一局域网下互联
项目场景: 同一局域网下各个主机互相连接同一个redis 问题描述 无法连接 原因分析: 没有放行对方的地址 解决方案: 修改配置文件 最重要的一步如下 然后把 redis.windows.conf的文件也照上面的修改一下保持一致 然后安装一下redis服务这…...

Near-Optimal Bayesian Online Assortment of Reusable Resources
摘要 受租赁服务在电子商务中的应用的激励,我们考虑为不同类型的到达消费者提供可重复使用资源的在线分类的收入最大化。我们针对贝叶斯环境中的最优在线策略设计了具有竞争力的在线算法,其中类型随时间独立于已知的异构分布绘制。在初始库存最小值cmin…...

数据库复习2
一. 简答题(共1题,100分) 1. (简答题) 存在数据库test,数据库中有如下表: 1.学生表 Student(Sno,Sname,Sage,Ssex) --Sno 学号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 主键Sno 2.教师表 Teacher(Tno,Tname) --T…...

公众号运营之竞品分析,教你拆解公众号
知己知彼,百战不殆,公众号运营亦是如此。 当运营者只关注自己账号的时候,很容易陷入某个误区中出不来。这个时候就要拓宽我们的视野,多去看看“外面的世界”,不要只局限于自己的一片小天地中。 看看同领域优秀公众号…...

python常见问题详解
Python python 没有多态,而是鸭子类型 多继承,没有接口,可通过语法糖实现接口的作用 lambda中只能有一句 "/"表示之前的参数是必须是位置参数,”**“表示是后面的必须是关键字参数 Python多进程 Python 多线程是伪多线…...

MyBatis-常用SQL操作
一、动态SQL 1.概述】 1.1动态SQL: 是 MyBatis 的强大特性之一,解决拼接动态SQL时候的难题,提高开发效 1.2分类: if choose(when,otherwise) trim(where,set) foreach 2.if 2.1 做 where 语句后面条件查询的,if 语句是可以…...

DSPE-PEG-TCO;磷脂-聚乙二醇-反式环辛烯科研用化学试剂简介
中文名称 磷脂-聚乙二醇-反式环辛烯 英文名称 DSPE-PEG-TCO 外观:粉末或半固体,取决于分子量。 溶剂:溶于大部分有机溶剂,如:DCM、DMF、DMSO、THF等等。在水中有很好的溶解性 稳定性:冷藏保存ÿ…...