JAVA 日期类Date SimpleDateFormat Calendar

news/2025/1/12 21:59:37/

1、Date日期类

类 Date 表示一个特定的瞬间,精确到毫秒
1.1 Date的构造函数
Date() 分配一个 Date 对象,以表示分配它的时间(精确到毫秒)
Date(long date) 分配一个 Date 对象,表示自从标准基准时间起指定时间的毫秒数
标准基准时间:称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00

1.2 Date的构造函数练习

创建包:cn.cxy.date
创建类:TestDate1

package cn.cxy.date;import java.util.Date;/*本类用于Date的入门*/
public class TestDate1 {public static void main(String[] args) {//1.利用无参构造创建Date类对象,注意导包:import java.util.Date;Date d1= new Date();System.out.println(d1);//Thu Sep 23 23:14:59 CST 2021//2.利用含参构造创建Date对象long t = 1000*60*60;//1000ms*60*60->1min*60->1hDate d2 = new Date(t);//从标准基础时间1970-1-1-00:00开始往后数1hSystem.out.println(d2);//Thu Jan 01 09:00:00 CST 1970//CST是中国时区,所以额外加了8h变成了09:00:00}
}

常用时间缩写

GMT 格林尼治时间 = UTC 协调世界时间
UTC + 时区差 = 本地时间,我们是在东八区,东加西减,所以
CST 中国标准时间:China Standard Time UT+8:00

1.3 Date的常用方法练习

getTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒值
setTime(long time) 设置时间,表示 1970 年 1 月 1 日 00:00:00 GMT 后的毫秒值

创建包:cn.cxy.date
创建类:TestDate2

package cn.cxy.date;import java.util.Date;/*本类用于Date的常用方法测试*/
public class TestDate2 {public static void main(String[] args) {//1.创建Date对象Date d1 = new Date();//2.获取从标准基准时间到现在时间的毫秒值,是一个时间差System.out.println(d1.getTime());//1632404114206//*1.0是为了变成浮点型,/1000变成秒,/60变成分,/60变成小时,/24变成天,/365变成年System.out.println(d1.getTime() * 1.0 / 1000 / 60 / 60 / 24 / 365);//约等于51,从1970到2021//3.打印d1就是当前的时间System.out.println(d1);//Thu Sep 23 21:39:29 CST 2021//4设置一个long值,作为毫秒为单位的时间差long t = 1000*60*60;d1.setTime(t);System.out.println(d1);//打印的就是从标准基准时间经过时间差t的时间}
}

2、SimpleDateFormat

SimpleDateFormat 常用于格式化和解析日期
日期和时间格式由日期和时间模式字符串指定,字母与日期时间的对应关系如下

在这里插入图片描述

2.1 常用构造函数

SimpleDateFormat() 用默认模式的日期格式构造 SimpleDateFormat
SimpleDateFormat(String pattern) 用给定模式的日期格式构造 SimpleDateFormat

2.2 日期转换格式工具类练习

创建包:cn.cxy.date
创建类:TestSDF.java

package cn.cxy.date;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;/*本类用于测试SimpleDateFormat类*/
public class TestSDF {public static void main(String[] args) throws ParseException {/*01 格式化:从 Date 到 String*///1.创建日期类对象,包含当前的时间Date d = new Date();//2.创建日期转换工具类的对象,此时使用的是无参构造//SimpleDateFormat sdf = new SimpleDateFormat();SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");//3.通过刚刚创建好的工具类对象转换日期的格式String s = sdf2.format(d);//4.打印转换好的时间字符串://默认时间格式:21-9-23 下午11:18//自定义时间格式:2021/09/23 10:21:39System.out.println(s);/*解析:从String到 Date*///1.定义一个时间字符串String s2 = "2021/9/23 22:24:03";//报错:ParseException解析异常: Unparseable date不可分割日期: "2021/9/23 22:24:03"//SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");//2.利用含参构造创建工具类对象,指定格式,注意必须是规定格式,否则会抛出异常SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");//3.利用工具类对象对日期进行转换Date d2= sdf3.parse(s2);//4.打印转换好的日期System.out.println(d2);//Thu Sep 23 22:24:03 CST 2021}
}

2.3 日期转换综合练习

创建包:cn.cxy.date2
创建工具类:DateUtils.java

package cn.cxy.date2;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;/*本类用作日期类的工具类,一般工具类的要求:
* 构造方法私有化 & 成员方法静态化*/
public class DateUtils {//1.创建一个私有化的构造方法private DateUtils(){}//2.创建一个将日期转换为字符串的方法//参数:日期对象Date  日期转换的格式:format 返回值类型:Stringpublic static String dateToString(Date date, String format){//1.通过传入的日期格式,创建指定的工具类对象SimpleDateFormat sdf = new SimpleDateFormat(format);//2.通过工具类对象将字符串转换为对应的日期字符串,并拿到转换后的字符串结果String s = sdf.format(date);/*转换*///3.将最终转换的字符串结果返回return s;}//3.创建一个将字符串转换为日期的方法//参数:字符串对象String  日期转换的格式:format 返回值类型:Datepublic static Date stringToDate(String s, String format) throws ParseException {//1.通过传入的日期格式,创建指定的工具类对象SimpleDateFormat sdf = new SimpleDateFormat(format);//2.通过工具类对象将日期对象转换为对应的字符串,并拿到转换后的日期对象Date d = sdf.parse(s);/*解析*///3.将最终转换的日期对象作为方法的结果返回return d;}
}

创建包:cn.cxy.date2
创建测试类:TestDate.java

package cn.cxy.date2;import java.text.ParseException;
import java.util.Date;/*本类用于自定义日期工具类的测试类*/
public class TestDate {public static void main(String[] args) throws ParseException {//1.创建日期类对象Date d = new Date();//2.调用自定义日期工具类的功能:将日期对象转换成字符串String s = DateUtils.dateToString(d, "yyyy年MM月dd日 HH:mm:ss");String s2 = DateUtils.dateToString(d, "yyyy年MM月dd日");String s3 = DateUtils.dateToString(d, "HH:mm:ss");System.out.println(s);//2021年09月23日 10:55:32System.out.println(s2);//2021年09月23日System.out.println(s3);//10:58:21//3.调用自定义工具类的功能,将字符串转换为对应的日期对象//注意,此处的format格式必须与s字符串定义时的格式一致!!!否则转换会报错!Date d2 = DateUtils.stringToDate(s, "yyyy年MM月dd日 HH:mm:ss");System.out.println(d2);//Thu Sep 23 23:01:21 CST 2021}
}

3.Calendar日历类

3.1 概念

Calendar 类是一个抽象类,不可直接实例化,但是它有一个直接已知子类GregorianCalendar
它为特定瞬间与还有比如年月日等日历字段之间的转换和操作提供了一些方法

3.2 常用方法

Calendar提供了一个方法getInstance()用于获取Calendar对象,它的日历字段就是当前的日期

int get(int field) 返回给定日历字段的值
abstract void add(int field, int amount) 根据日历的规则,为给定的日历字段添加或减去指定的时间量
void set(int year, int month, int date) 设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值

3.3 入门案例

创建包:cn.cxy.date3
创建类:TestCalendar.java

package cn.cxy.date3;import org.junit.Test;
import java.util.Calendar;/*本类用于练习日历类*/
public class TestCalendar {@Testpublic void TestGet(){//1.获取日历对象Calendar c = Calendar.getInstance();System.out.println(c);//能获取很多信息,比如MONTH=8,我们现在是9月,说明月份是从0开始的//2.通过获取到的日历对象,调用get(),传入对应的日历字段,就可以拿到对应的值int year = c.get(Calendar.YEAR);int month = c.get(Calendar.MONTH)+1;int day = c.get(Calendar.DAY_OF_MONTH);System.out.println(year + "年" + month + "月" + day + "日");//2021年9月24日}@Testpublic void TestAdd1(){//1.获取日历对象Calendar c = Calendar.getInstance();//2.给指定的日历字段进行指定数目的加减操作,得到10年后的今天c.add(Calendar.YEAR,+10);//3.通过获取到的日历对象,调用get(),传入对应的日历字段,就可以拿到对应的值int year = c.get(Calendar.YEAR);int month = c.get(Calendar.MONTH)+1;int day = c.get(Calendar.DAY_OF_MONTH);//4.打印的就是10年后的今天:2031年9月24日System.out.println(year + "年" + month + "月" + day + "日");}@Testpublic void TestAdd2(){//需求:打印1年后的7天后//1.获取日历对象Calendar c = Calendar.getInstance();//2.给指定的日历字段进行指定数目的加减操作,得到10年后的今天c.add(Calendar.YEAR,+1);c.add(Calendar.DAY_OF_MONTH,+7);//3.通过获取到的日历对象,调用get(),传入对应的日历字段,就可以拿到对应的值int year = c.get(Calendar.YEAR);int month = c.get(Calendar.MONTH)+1;int day = c.get(Calendar.DAY_OF_MONTH);//4.打印1年后的7天后:2022年10月1日System.out.println(year + "年" + month + "月" + day + "日");}@Testpublic void TestSet(){//1.获取日历对象Calendar c = Calendar.getInstance();//2.测试set方法c.set(2099,9,1);//3.通过获取到的日历对象,调用get(),传入对应的日历字段,就可以拿到对应的值int year = c.get(Calendar.YEAR);int month = c.get(Calendar.MONTH)+1;int day = c.get(Calendar.DAY_OF_MONTH);//4.打印:2099年10月1日System.out.println(year + "年" + month + "月" + day + "日");}
}

3.4 巩固案例

创建包:cn.cxy.date3
创建类:TestCalendar.java
需求:用户任意输入一个年份,输出这年的2月有多少天

package cn.cxy.date3;import java.util.Calendar;
import java.util.Scanner;/*本类用于日历类的巩固练习* 需求:获取任意一年的2月有多少天*/
public class TestFeb {public static void main(String[] args) {//1.提示并接收用户要测试的年份:System.out.println("请您输入要查询的年份:");int year = new Scanner(System.in).nextInt();//2.获取日历类对象,并将时间设置为用户输入那年的3月1日Calendar c = Calendar.getInstance();c.set(year, 2, 1);//3.三月一日往前推一天就是2月的最后一天c.add(Calendar.DATE, -1);//4.获取这一天输出即可int date = c.get(Calendar.DATE);System.out.println(year + "年的2月有" + date + "天");}
}

http://www.ppmy.cn/news/571352.html

相关文章

Flutter中的无名英雄——Focus

Flutter中的无名英雄——Focus 在Flutter中,Focus是一个非常强大的组件,它可以接受用户输入和处理焦点事件,是实现交互功能的重要组成部分。 Focus的基本概念 Focus是一个widget,可以被包含在其他widget中,用于接受…

数据结构-哈希-位图与布隆过滤器

位图与布隆过滤器 一,位图题目分析位图设计位图代码经典题目 二,布隆过滤器布隆过滤器概念布隆过滤器的插入布隆过滤器的结构布隆过滤器总结经典题目 三,哈希切割 一,位图 题目分析 🚀给40亿个不重复的无符号整数&am…

微软公布量子超级计算机路线图

光子盒研究院 6月22日,微软公布了三个重要的量子计算公告。首先,公司宣布它已经实现了通往量子超级计算机的六步路线图的第一个里程碑,并发表了一篇经同行评议的研究论文来证明这一成就。 这家科技巨头的第二项公告是将其人工智能&#xff08…

Git 40个常用命令

1. 检测 git 是否安装成功 git --version 2. 配置 username, email git config --global user.name “user” git config --global user.email “userqq.com” 3. 查看自己的配置 git config --global --list 4. 新建仓库 或者 直接使用 git init project cd folder git…

数据结构讲了什么?

数据结构学了什么? 如何用程序代码把现实世界的问题信息化 (1)虚拟货币 (2)微信小程序排队等餐如何用计算机高效的处理这些信息从而创造价值

ConstraintLayout使用指南

ConstraintLayout ConstraintLayout 可让您使用扁平视图层次结构(无嵌套视图组)创建复杂的大型布局。它与 RelativeLayout 相似,其中所有的视图均根据同级视图与父布局之间的关系进行布局,但其灵活性要高于 RelativeLayout&#x…

Spring 事务异常 UnexpectedRollbackException

出现原因 Spring 框架的默认事务传播方式是 PROPAGATION_REQUIRED (内层事务加入外层事务中) 在内层事务因异常结束时, Spring 会把事务标记为 rollback-only. 这时如果外层事务 catch 捕捉了异常 e, 那么外层事务方法还会继续执行代码, 直到外层事务结束. Spring 发现事务已…

神经网络原理(2)

斯坦福大学的印度学生、机器学习爱好者 PararthShah 在2012年12月22日的使用买芒果的例子解释了神经网络,简单来说就是:如果你需要选芒果,但不知道什么样的芒果最好吃,一个简单粗暴的方法是尝遍所有的芒果,然后总结出个…