【JAVA语言-第12话】API中的工具类 之 Date,DateFormat,SimpleDateFormat,Calendar类的详细解析

目录

日期和时间

1.1 Date类

1.1.1 概述

1.1.2 常用方法 

1.1.3 案例

1.2 DateFormat类 

1.2.1 概述

1.2.2 常用方法

1.3 SimpleDateFormat类

1.3.1 概述

1.3.2 构造方法

1.3.3 模式字符 

1.3.4 日期转字符串

1.3.5 字符串转日期

1.4 Calendar类

1.4.1 概述

1.4.2 静态方法

1.4.3 常用成员方法

1.4.4 成员方法中参数field的常用取值

1.4.5 练习


日期和时间

1.1 Date类

1.1.1 概述

        java.util.Date类:表示特定的瞬间,精确到毫秒(千分之一秒),1000毫秒=1秒。毫秒值的作用,可以对时间和日期进行计算,先把日期转换为毫秒进行计算,计算完毕,再把毫秒转换为日期。

1.1.2 常用方法 

构造方法:

        Date():获取的就是当前系统的日期和时间。不格式化的情况显示格式是中国标准时间。

        Date(Long date):传递毫秒值,把毫秒转换为Date日期。

        

成员方法:

        Long getTime():把日期转换为毫秒值(相当于System.currentTimeMillis()),就是计算当前日期到时间原点之间一共经历了多少毫秒。

        

注:

        1.时间原点(0毫秒):1970年1月1日00:00:00。

        2.中国是属于东八区,会把时间增加8个小时,时间原点为:1970年1月1日08:00:00。

        3.一天 = 24 * 60 * 60 = 86400秒 = 86400 * 1000 = 86400000毫秒

1.1.3 案例

要求:获取当前日期,将当前日期转换成毫秒值,并将毫秒值在转换成日期。 

 源代码:

package com.zhy.util;import java.util.Date;public class TestDate {public static void main(String[] args) {Date date = new Date();System.out.println("获取当前日期和时间:" + date);Long missValue = date.getTime();System.out.println("日期 转换成 毫秒值:" + missValue);Date date2 = new Date(missValue);System.out.println("毫秒值 转换成 日期:" + date2);}
}

输出结果:

1.2 DateFormat类 

1.2.1 概述

        java.text.DateFormat类:是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期(Date对象)和文本(String对象)之间的转换,格式化(也就是日期转换为文本),解析(文本转换为日期)。

1.2.2 常用方法

         DateFormat类是一个抽象类,无法直接创建对象使用,可以使用DateFormat的子类(java.text.SimpleDateFormat),常用的方法如下。

String format(Date date):按照指定的模式,把Date日期,格式化为符合模式的字符串。

Date parse(String source):把符合模式的字符串,解析为Date日期。

1.3 SimpleDateFormat类

1.3.1 概述

        SimpleDateFormat是一个用于格式化和解析日期的类。它提供了一种简单而灵活的方式来将日期转换为特定格式的字符串,或将字符串解析为日期对象。

1.3.2 构造方法

格式:
        SimpleDateFormat(String pattern);

说明:用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。

        参数pattern:传递指定的模式。

1.3.3 模式字符 

        SimpleDateFormat使用一系列模式字符来定义日期格式,这些模式字符可以代表年、月、日、小时、分钟、秒等各个部分的值。通过在SimpleDateFormat的构造函数中传入指定的日期格式模式,我们可以创建一个可以格式化和解析指定日期格式的SimpleDateFormat对象。

模式说明
y
M
d
H
m
s
S毫秒

模式:区分大小写的,字母不可更改,连接模式的符号可以改变。 

1.3.4 日期转字符串

        使用SimpleDateFormat类的format()成员方法实现。

格式:

        String format(Date date):把日期格式化为文本(按照指定的模式,把Date日期,格式化为符合模式的字符串)。

源代码:

package com.zhy.util;import java.text.SimpleDateFormat;
import java.util.Date;public class TestSimpleDateFormat {public static void main(String[] args){//1.创建SimpleDateFormat对象,构造函数中传递指定的模式。SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd");//2.调用SimpleDateFormat对象中的format方法,按照构造方法中指定的模式,把Date日期格式化为符合模式的字符串文本。Date date = new Date();System.out.println("没有格式化的日期:" + date);String dateS = sdf.format(date);System.out.println("使用模式 yyyy-MM-dd HH:mm:ss SSS 格式化日期:" + dateS);String dateS2 = sdf2.format(date);System.out.println("使用模式 yyyy/MM/dd 格式化日期:" + dateS2);}
}

输出结果:

1.3.5 字符串转日期

         使用SimpleDateFormat类的parse()成员方法实现。

格式:

        Date parse(String source):把文本解析为日期(把符合模式的字符串,解析为Date日期)。

        

注意事项:

        parse方法声明了一个异常,叫做ParseException(解析异常),如果字符串和构造方法中的模式不一样,那么程序就会抛出此异常,也就是编译报错,必须要处理,要么throws继续声明抛出这个异常,要么try…catch自己处理这个异常。

源代码:

package com.zhy.util;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class TestSimpleDateFormat {public static void main(String[] args) throws ParseException {//1.创建SimpleDateFormat对象,构造函数中传递指定的模式。SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd");//2.调用SimpleDateFormat对象中的parse方法,把符合构造方法中模式的字符串,解析为Date日期。Date date = sdf.parse("2024-01-08 11:45:08");System.out.println(date);Date date2 = sdf2.parse("2024/01/08");System.out.println(date2);}
}

输出结果:

1.4 Calendar类

1.4.1 概述

        java.util.Calendar类:日历类,Calendar类是一个抽象类,里面提供了很多操作日历字段的方法(YEAR、MONTH、DAY_of_MONTH、HOUR),Calendar类无法直接创建对象使用,里面有一个静态方法叫getInstance(),该方法返回了Calendar类的子类对象。

1.4.2 静态方法

public static Calendar getInstance():使用默认时区和语言环境获得一个日历。

        //获取日历Calendar c = Calendar.getInstance();

1.4.3 常用成员方法

public Date getTime():返回一个Date对象,表示此日历的时间值,默认当前日期。 

public Date setTime(Date date):将此日历的时间设置为给定日期(date)。

package com.zhy.util;import java.util.Calendar;
import java.util.Date;public class CalendarTest {public static void main(String[] args) {//日历Calendar c = Calendar.getInstance();//第一次获取日历日期,默认当前日期Date now = c.getTime();//设置 当前日历时间 为 当前日期c.setTime(now);}
}

public void add(int field, int amount):根据日历的规则,在给定的日历字段中添加或减去指定的时间量。

package com.zhy.util;import java.util.Calendar;
import java.util.Date;public class CalendarTest {public static void main(String[] args) {;//日历Calendar c = Calendar.getInstance();//第一次获取日历日期,默认当前日期Date now = c.getTime();//将 日历的当前时间 设置成当前日期c.setTime(now);//1.从日历的当前时间,减去1年c.add(Calendar.YEAR, -1);c.setTime(now);//2.从日历的当前时间,加上2个月c.add(Calendar.MONTH, 2);c.setTime(now);//3.从日历的当前时间,减去10天c.add(Calendar.DAY_OF_MONTH,-10);}
}

public int get(int field):返回给定 日历字段(field) 的值。
public void set(int field,int value):将给定的 日历字段(field) 设置为 给定值(value)。

public void set(int year, int month, int date):年月日。

public void set(int year, int month, int date, int hourOfDay, int minute):年月日时分。

public void set(int year, int month, int date, int hourOfDay, int minute,int second):年月日时分秒。

package com.zhy.util;import java.util.Calendar;public class CalendarTest {public static void main(String[] args) {//日历Calendar c = Calendar.getInstance();//1.设置 日历当前日期 的年份c.set(Calendar.YEAR,2025);//2.设置 日历当前日期 的年月日c.set(2026,Calendar.MAY,19);//3.设置 日历当前日期 的年月日时分c.set(2027,Calendar.MAY,19,12,30);//4.设置 日历当前日期 的年月日时分秒c.set(2028,Calendar.MAY,19,12,30,59);//5.获取 日历当前日期 的年份int year = c.get(Calendar.YEAR);System.out.println(year);//6.获取 日历当前日期 的月份,取值:0-11(1月-12月)int month = c.get(Calendar.MONTH);//month = 4,表示5月份}
}

public int getFirstDayOfWeek():获取一周的第一天,默认值=1(星期日)。

public void setFirstDayOfWeek(int value):设置一周的第一天。

package com.zhy.util;import java.util.Calendar;public class CalendarTest {public static void main(String[] args) {//日历Calendar c = Calendar.getInstance();//1.获取一周的第一天,默认 值 = 1(星期日)int firstDay= c.getFirstDayOfWeek();//2.设置一周的第一天为周一c.setFirstDayOfWeek(Calendar.MONDAY);//3.再次获取,此时 值 = 2(星期一)firstDay= c.getFirstDayOfWeek();}
}

1.4.4 成员方法中参数field的常用取值

Calendar.ERA:纪元,取值:只能为0(代表公元前)或1(代表公元)
Calendar.YEAR:年
Calendar.MONTH:月
Calendar.DATE:一个月中的第几天,等同于Calendar.DAY_OF_MONTH
Calendar.HOUR:12小时制下的小时数,中午和午夜表示为0
Calendar.HOUR_OF_DAY:24小时制下的小时数,午夜表示为0
Calendar.MINUTE:分
Calendar.SECOND:秒
Calendar.MILLISECOND:毫秒
Calendar.AM_PM=0:时间是在中午之前还是之后,取值0(中午前)和1(中午后)

        

Calendar.DAY_OF_MONTH:一年中的第几天(判断当前日期是几月份),取值0-11(1月份-12月份)
    一月:Calendar.JANUARY = 0
    二月:Calendar.FEBRUARY = 1
    三月:Calendar.MARCH = 2
    四月:Calendar.APRIL = 3
    五月:Calendar.MAY = 4
    六月:Calendar.JUNE = 5
    七月:Calendar.JULY = 6
    八月:Calendar.AUGUST = 7
    九月:Calendar.SEPTEMBER = 8
    十月:Calendar.OCTOBER = 9
    十一月:Calendar.NOVEMBER = 10
    十二月:Calendar.DECEMBER = 11
Calendar.DAY_OF_MONTH:一个月中的第几天(判断当前日期是几号)
Calendar.DAY_OF_WEEK_IN_MONTH:这一天所对应的星期几在该月中是第几次出现(判断当前日期是这个月的第几个星期几)
Calendar.DAY_OF_WEEK:一周中的第几天(判断当前日期是周几),取值1-7(周日-周六)
    星期日:Calendar.SUNDAY=1
    星期一:Calendar.MONDAY=2
    星期二:Calendar.TUESDAY=3
    星期三:Calendar.WEDNESDAY=4
    星期四:Calendar.THURSDAY=5
    星期五:Calendar.FRIDAY=6
    星期六:Calendar.SATURDAY=7

        

Calendar.WEEK_OF_YEAR:一年中的第几个星期
Calendar.WEEK_OF_MONTH:一个月中的第几个星期

        

Calendar.firstDayOfWeek:一周中的第一天,默认1(星期日)

1.4.5 练习

源代码: 

package com.zhy.util;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;public class CalendarTest {public static void main(String[] args) throws ParseException {//日期格式化SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//获取日历Calendar c = Calendar.getInstance();//一、获取当前日期Date now = c.getTime();System.out.println("当前日期:" + sdf.format(c.getTime()));System.out.println("=============================================");//二、获取本周周五的日期//1.设置 日历当前时间 为当前日期c.setTime(now);//2.设置当当前日历每周的第一天为周一,则:c.getFirstDayOfWeek()=2c.setFirstDayOfWeek(Calendar.MONDAY);//3.在 当前日期 的基础上,根据公式推算 当前日期 距离周五 的天数,进行日期偏移。//  c.get(Calendar.DAY_OF_WEEK):由于周日=1,为了符合数字和星期对应,每一天都要-1;//  例如:周一的c.get(Calendar.DAY_OF_WEEK)=2,减一之后c.get(Calendar.DAY_OF_WEEK)=1,后面以此类推c.add(Calendar.DATE, (c.getFirstDayOfWeek() - (c.get(Calendar.DAY_OF_WEEK) - 1) + 3));//4.格式化日期System.out.println("本周周五是:" + sdf.format(c.getTime()));System.out.println("=============================================");//三、获取一年三月个后的倒数第五天的日期//1.设置日历为当前日期c.setTime(now);//2.在当前日期的基础上加上1年4个月c.add(Calendar.YEAR,1);c.add(Calendar.MONTH,4);//3.往前倒数5天,0:倒数一天,-4:倒数5天c.set(Calendar.DAY_OF_MONTH,-4);//4.格式化日期System.out.println("一年三个月后的倒数第五天是:" + sdf.format(c.getTime()));}
}

输出结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/619444.shtml

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

相关文章

Raspbian安装摄像头

Raspbian安装摄像头 1. 源由2. 摄像头2.1 选型2.2 系统2.3 安装 3. 配置&命令3.1 命令3.2 配置 4. 测试4.1 拍照4.1.1 libcamera-jpeg4.1.2 libcamera-still 4.2 视频流4.2.1 RTSP流4.2.2 TCP流 5. 参考资料 1. 源由 家里闲置两块树莓派,打算做个WiFi视频流RTS…

【JaveWeb教程】(21) MySQL数据库开发之多表设计:一对多、一对一、多对多的表关系 详细代码示例讲解

目录 2. 多表设计2.1 一对多2.1.1 表设计2.1.2 外键约束 2.2 一对一2.3 多对多2.4 案例 2. 多表设计 关于单表的操作(单表的设计、单表的增删改查)我们就已经学习完了。接下来我们就要来学习多表的操作,首先来学习多表的设计。 项目开发中,在进行数据库…

MISGAN

MISGAN:通过生成对抗网络从不完整数据中学习 代码、论文、会议发表: ICLR 2019 摘要: 生成对抗网络(GAN)已被证明提供了一种对复杂分布进行建模的有效方法,并在各种具有挑战性的任务上取得了令人印象深刻的结果。然而,典型的 GAN 需要在训练期间充分观察数据。在本文中…

matlab中any()函数用法

一、帮助文档中的介绍 B any(A) 沿着大小不等于 1 的数组 A 的第一维测试所有元素为非零数字还是逻辑值 1 (true)。实际上,any 是逻辑 OR 运算符的原生扩展。 二、解读 分两步走: ①确定维度;②确定运算规则 以下面二维数组为例 >>…

FEB(acwing)

文章目录 FEB题目描述输入格式输出格式数据范围输入样例1:输出样例1:输入样例2:输出样例2:输入样例3:输出样例3:代码题解情况1:xxxxxx:0,1,2,…&a…

AI教我学编程之C#变量及实例演示

前言 在AI教我学编程之AI自刀 这篇文章中,我们知道了变量的基础类型,那么变量在C#中有什么作用呢?我们一起来看看吧! 目录 重点先知 变量 变量类型 实例演示 变量声明 实例演示 提出疑问 初始化变量 自动初始化 多变量声明 实…

【深度学习目标检测】十六、基于深度学习的麦穗头系统-含GUI和源码(python,yolov8)

全球麦穗检测是植物表型分析领域的一个挑战,主要目标是检测图像中的小麦麦穗。这种检测在农业领域具有重要意义,可以帮助农民评估作物的健康状况和成熟度。然而,由于小麦麦穗在视觉上具有挑战性,准确检测它们是一项艰巨的任务。 全…

使用emu8086实现——顺序程序设计

一、实验目的 1. 掌握顺序程序设计方法 2. 掌握汇编语言编程设计方法。 二、实验内容 1.用查表的方法将一位十六进制数转换成它相应的ASCII码。 代码及注释: Data segment ;定义数据段Tab db 30h,31h,32h,33h,34h,35,36h,37h,38h,39h ;定义一个Tab的字节型…

js逆向第20例:猿人学第19题乌拉乌拉乌拉

文章目录 一、前言二、定位关键参数1、JA3/TLS指纹怎么查看2、加密值长度对比三、代码实现四、参考文献一、前言 任务十九:抓取这5页的数字,计算加和并提交结果 此题在以前用python写逆向代码是存在缺陷的,直到今年有个大佬开源了curl_cffi库,并且支持 JA3/TLS 和 http2 指…

npmvue详解

1、npm是node.js的一个软件依赖包管理工具 2、当前目录下面一般会有一个package.json文件 3、npm install 会去按照package.json文件中的依赖去下载依赖包 默认会下载到当前目录中的node_modules文件夹下,-g会进行全局安装 4、package.json文件中有两种依赖关系 …

H7303 无电感,线性恒流,低压差,大电流,车灯/台灯 9V 12V 24V 30V

线性恒流芯片是一种用于控制电流的电子元件,通常用于驱动LED等器件。它的工作原理是通过维持输出电流的恒定来保持被驱动器件的亮度或功率稳定。 具体来说,线性恒流芯片会监测输出电流并调整电压以保持恒定的电流流过被驱动器件。以下是其基本工作步骤&…

MaxKey 单点登录认证系统——实现登录后自动跳转及分析思路

Maxkey单点登录系统集成业务系统应用之后,登录界面登录之后不会自动跳转业务系统,需要在首页点击相应应用之后,才能实现跳转业务系统,故以下本人提供解决方法和分析思路。 环境配置 本例使用的是CAS协议实现单点登录 Maxkey 服务…

企业如何做到安全又极速的分发传输大文件

在当代企业运营中,文件的传输和分发是至关重要的任务。然而,随着文件体积的增大和信息敏感性的凸显,企业需要找到一种既安全又能够高效传输大文件的方法。本文将深入探讨如何在企业环境中实现安全又高效的大文件传输。 一、分发大文件时需要注…

day-08 构造限制重复的字符串

思路 首先统计每个字符的个数&#xff0c;然后从后向前按照题意添加字符 解题方法 从后向前添加字符&#xff1a;1.当前字符个数<repeatLimit,直接添加 2.当前字符个数>repeatLimit,添加repeatLimit个&#xff0c;然后插入一个下一级字符 时间复杂度:O(n) 空间复杂度:…

在CentOS中,对静态HTTP服务的性能监控

在CentOS中&#xff0c;对静态HTTP服务的性能监控和日志管理是确保系统稳定运行和及时发现潜在问题的关键。以下是对这一主题的详细探讨。 性能监控 使用工具监控&#xff1a;top、htop、vmstat、iostat等工具可以用来监控CPU、内存、磁盘I/O等关键性能指标。这些工具可以实时…

【C++】map和set的模拟实现

map和set的模拟实现 插入模拟实现正向迭代器模拟实现插入完整实现map的[ ]接口模拟实现正向迭代器完整代码反向迭代器模拟实现 喜欢的点赞&#xff0c;收藏&#xff0c;关注一下把&#xff01; 在前面几篇C的博客&#xff0c;讲过了二叉搜索树&#xff0c;AVL树&#xff0c;红黑…

Halcon边缘滤波器edges_image 算子

Halcon边缘滤波器edges_image 算子 基于Sobel滤波器的边缘滤波方法是比较经典的边缘检测方法。除此之外&#xff0c;Halcon也提供了一些新式的边缘滤波器&#xff0c;如edges_image算子。它使用递归实现的滤波器&#xff08;如Deriche、Lanser和Shen&#xff09;检测边缘&…

Android中集成FFmpeg及NDK基础知识

前言 在日常App开发中,难免有些功能是需要借助NDK来完成的,比如现在常见的音视频处理等,今天就以ffmpeg入手,来学习下Android NDK开发的套路. JNI和NDK 很多人并不清除JNI和NDK的概念,经常搞混这两样东西,先来看看它们各自的定义吧. JNI和NDK 很多人并不清除JNI和NDK的概念…

成就动机测试

成就动机测试广泛应用在职业发展领域&#xff0c;如&#xff1a;企业Hr人力资源管理部门&#xff0c;用于评估分析员工的潜能和价值&#xff0c;适用场景有人才招聘&#xff0c;岗位晋升&#xff0c;绩效考评等等。在大学生做职业规划&#xff0c;求职应聘中&#xff0c;应用成…

【python】基础知识类的语法功能讲解

Python代码定义了一个名为Calculation的类&#xff0c;用于执行基础的数学运算&#xff08;加法、减法、乘法、除法和取模&#xff09;。下面我将详细解释各个部分的功能&#xff0c;并以列表形式总结&#xff1a; 类定义&#xff1a; class Calculation: 定义了一个名为Cal…