一.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 //创建以标准基准时间为基准,指定往后偏移1000ms Date date2 = new Date(1000); System.out.println(date2);//Thu Jan 01 08:00:01 CST 1970 //获取当前日期对象距离标准基准时间的毫秒值 System.out.println(date1.getTime());//1636196765779 System.out.println(date1.getTime());//1000 //修改date1距离标准基准时间的毫秒值为2000 date1.setTime(2000); System.out.println(date1);//Thu Jan 01 08:00:02 CST 1970 date2.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));//false System.out.println("date3的日期是否在date1之后"+date3.after(date1));//true
二. DateFormat类概述
DateFormat是日期/时间格式化子类的’抽象类’
作用:
1.格式化:(日期——>文本)Date—>String
2.解析:(文本——>日期)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() String String 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));//2022 System.out.println(calendar.get(Calendar.MONTH));//7 System.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