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

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是日期/时间格式化子类的’抽象类’

作用:

  1. 格式化:(日期——>文本)Date—>String

  1. 解析:(文本——>日期)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出现。表示一个日期和时间&#xff0c;精确到毫秒&#xff0c;内部getTime()从1970年1月1号开始算。1. java.util.Date类构造部份构造已经过时&#xff0c;重点看以下两个构造。public Date()从运行程序的此时此刻到时间原点经历的毫秒值&…...

计算机网络你都懂了吗

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

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 实战&#xff1a;Spring Boot 实现系统多环境配置 3.4 Spring Boot 日志配置 日志对于系统监控、故障定位非常重要&#xf…...

3款百里挑一的国产软件,逆天好用,装了就舍不得卸载

推荐3款让你偷懒&#xff0c;让你上头的提效电脑软件&#xff0c;个个功能强大&#xff0c;让你远离加班&#xff01; 很多几个小时才能做好的事情&#xff0c;用上它们&#xff0c;只需要5分钟就行&#xff01;&#xff01; 1、JNPF快速开发平台 JNPF 是一款精巧耐用的软件…...

Java实现在线沟通功能

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

识别密文加密类型

离线密码破解&#xff1a;离线不会触发密码锁定机制不会产生大量登录失败日志引起管理员注意HASH识别工具&#xff08;识别哈希类型&#xff09;&#xff1a;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 实现系列数据分析呢?

当我们使用可视化分析工具制作仪表板时&#xff0c;可能需要制作的仪表板不是单个单个的可视化大屏&#xff0c;而是一系列的仪表板&#xff0c;我们需要用它来产生一个连续性的故事&#xff0c;那么这个时候我们该怎么办呢&#xff1f;例如说总分形式&#xff0c;我们需要一个…...

金仓数据库安装

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

深入浅出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&#xff0c;今天这篇文章…...

如何使评论具有可操作性?取悦客户的指南

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

一文带你彻底搞懂Nginx反向代理

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

手写SpringBoot的starter

自定义SpringBoot的starter 引言 starter命名格式&#xff1a; 官方的 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://链接&#xff1a;https://pan.baidu.com/s/1v5cN6…...

WindowsPowerShell 停止、启动、暂停和重启服务、卸载服务

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

数据库专题

请简洁描述 MySQL 中 InnoDB 支持的四种事务隔离级别名称&#xff0c;以及逐级之间的区别&#xff1f; 默认隔离级别 mysql repeatable-read oracle read-committed 脏读&#xff1a;不可重复读&#xff1a;幻读&#xff1a; CHAR 和 VARCHAR 的区别&#xff1f;…...

浅谈MySQL索引

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

安装包UI美化之路-通过nsNiuniuSkin来做Electron程序的打包、发布与升级

nsNiuniuSkin从发布之初&#xff0c;因其简单、简洁、高效&#xff0c;受到了非常多公司的青睐&#xff0c;现在已经越来越多的公司采用我们的这套解决方案来制作安装包了&#xff01; 从一个安装包UI插件&#xff0c;逐步演化成一套集美观、安全、简洁、自动化为一体的完整的…...

飞鹅打印机怎么样?飞鹅打印机好用吗?飞鹅打印机怎么知道订单是否漏单?

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

网络协议(八):传输层-TCP(三次握手、四次挥手原理)

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

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...