当前位置: 首页 > 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 网络…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...