java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date 对象。
1、构建
第一个构造函数使用当前日期和时间来初始化对象:Date( )
第二个构造函数接收一个参数,该参数是从 1970 年 1 月 1 日起的毫秒数:Date(long millisec)
2、调用方法
| 序号 | 方法和描述 |
|---|---|
| 1 | boolean after(Date date) 若当调用此方法的Date对象在指定日期之后返回true,否则返回false。 |
| 2 | boolean before(Date date) 若当调用此方法的Date对象在指定日期之前返回true,否则返回false。 |
| 3 | Object clone( ) 返回此对象的副本。 |
| 4 | int compareTo(Date date) 比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。 |
| 5 | int compareTo(Object obj) 若obj是Date类型则操作等同于compareTo(Date) 。否则它抛出ClassCastException。 |
| 6 | boolean equals(Object date) 当调用此方法的Date对象和指定日期相等时候返回true,否则返回false。 |
| 7 | long getTime( ) 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。 |
| 8 | int hashCode( ) 返回此对象的哈希码值。 |
| 9 | void setTime(long time) 用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期。 |
| 10 | String toString( ) 把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。 |
3、日期和时间的格式化编码
时间模式字符串用来指定时间格式。在此模式中,所有的 ASCII 字母被保留为模式字母,定义如下:
| 字母 | 描述 | 示例 |
|---|---|---|
| G | 纪元标记 | AD |
| y | 四位年份 | 2001 |
| M | 月份 | July or 07 |
| d | 一个月的日期 | 10 |
| h | A.M./P.M. (1~12)格式小时 | 12 |
| H | 一天中的小时 (0~23) | 22 |
| m | 分钟数 | 30 |
| s | 秒数 | 55 |
| S | 毫秒数 | 234 |
| E | 星期几 | Tuesday |
| D | 一年中的日子 | 360 |
| F | 一个月中第几周的周几 | 2 (second Wed. in July) |
| w | 一年中第几周 | 40 |
| W | 一个月中第几周 | 1 |
| a | A.M./P.M. 标记 | PM |
| k | 一天中的小时(1~24) | 24 |
| K | A.M./P.M. (0~11)格式小时 | 10 |
| z | 时区 | Eastern Standard Time |
| ' | 文字定界符 | Delimiter |
| " | 单引号 | ` |
4、示例
4.1、构建
//获取当前时间Date date2 = new Date();System.out.println("date2:"+ date2);
4.2、格式转换
//声明字符串式的日期String dateStr = "1991-10-30 00:00:00";System.out.println("dateStr:"+dateStr.toString());SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//String转dateDate date1 = dateFormat.parse(dateStr);System.out.println("date1:"+date1.toString());//获取当前时间Date date2 = new Date();System.out.println("date2:"+ date2);//date转StringString date2Str = dateFormat.format(date2);System.out.println("date2Str:"+date2Str);
4.3、比较时间大小
//1、日期比较--比较时间戳的大小// getTime() 方法获取两个日期(自1970年1月1日经历的毫秒数值),然后比较这两个值。System.out.println("时间戳比较:");long time1 = date1.getTime();System.out.println("time1:"+time1);long time2 = date2.getTime();System.out.println("time2:"+time2);//判断大小if (time1 > time2) {System.out.println("time1 > time2");}else{System.out.println("time1 < time2");}String timeToDate = dateFormat.format(time1);System.out.println("时间转date:time1转date:"+timeToDate);//2、使用方法 before(),after() 和 equals()。// 例如,一个月的12号比18号早,则 new Date(99, 2, 12).before(new Date (99, 2, 18)) 返回true。System.out.println("before比较:");if (date1.before(date2)){System.out.println("time1 < time2");}else{System.out.println("time1 > time2");}System.out.println("after比较:");if (date1.after(date2)){System.out.println("time1 > time2");}else{System.out.println("time1 < time2");}System.out.println("equals比较:");if (date1.equals(date2)){System.out.println("time1 = time2");}else{System.out.println("time1 != time2");}//3、使用 compareTo() 方法,它是由 Comparable 接口定义的,Date 类实现了这个接口。//如果参数Date等于此Date,则值0;如果此Date在Date参数之前,则值小于0;如果此Date在Date参数之后,则值大于0System.out.println("compareTo比较:");int i = date1.compareTo(date2);System.out.println("i:"+i);
4.4、Calendar类
//Calendar类//我们现在已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定部分呢,比如说小时,日,或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案是使用Calendar 类。//Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。//Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。System.out.println("Calendar类操作");System.out.println("date2:"+date2);Calendar calendar = Calendar.getInstance();calendar.setTime(date2);// 获得年份int year = calendar.get(Calendar.YEAR);System.out.println("year:"+year);// 获得月份int month = calendar.get(Calendar.MONTH) + 1;System.out.println("month:"+month);// 获得日期int date = calendar.get(Calendar.DATE);System.out.println("date:"+date);// 获得小时int hour = calendar.get(Calendar.HOUR_OF_DAY);System.out.println("hour:"+hour);// 获得分钟int minute = calendar.get(Calendar.MINUTE);System.out.println("minute:"+minute);// 获得秒int second = calendar.get(Calendar.SECOND);System.out.println("second:"+second);// 获得星期几(注意(这个与Date类是不同的):1代表星期日、2代表星期1、3代表星期二,以此类推)int day = calendar.get(Calendar.DAY_OF_WEEK);System.out.println("day:"+day);
5、整体测试代码
package com.wym.study.d20231207_日期时间;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;public class TestDateTime {public static void main(String[] args) throws ParseException {//声明字符串式的日期String dateStr = "1991-10-30 00:00:00";System.out.println("dateStr:"+dateStr.toString());SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//String转dateDate date1 = dateFormat.parse(dateStr);System.out.println("date1:"+date1.toString());//获取当前时间Date date2 = new Date();System.out.println("date2:"+ date2);//date转StringString date2Str = dateFormat.format(date2);System.out.println("date2Str:"+date2Str);//1、日期比较--比较时间戳的大小// getTime() 方法获取两个日期(自1970年1月1日经历的毫秒数值),然后比较这两个值。System.out.println("时间戳比较:");long time1 = date1.getTime();System.out.println("time1:"+time1);long time2 = date2.getTime();System.out.println("time2:"+time2);//判断大小if (time1 > time2) {System.out.println("time1 > time2");}else{System.out.println("time1 < time2");}String timeToDate = dateFormat.format(time1);System.out.println("时间转date:time1转date:"+timeToDate);//2、使用方法 before(),after() 和 equals()。// 例如,一个月的12号比18号早,则 new Date(99, 2, 12).before(new Date (99, 2, 18)) 返回true。System.out.println("before比较:");if (date1.before(date2)){System.out.println("time1 < time2");}else{System.out.println("time1 > time2");}System.out.println("after比较:");if (date1.after(date2)){System.out.println("time1 > time2");}else{System.out.println("time1 < time2");}System.out.println("equals比较:");if (date1.equals(date2)){System.out.println("time1 = time2");}else{System.out.println("time1 != time2");}//3、使用 compareTo() 方法,它是由 Comparable 接口定义的,Date 类实现了这个接口。//如果参数Date等于此Date,则值0;如果此Date在Date参数之前,则值小于0;如果此Date在Date参数之后,则值大于0System.out.println("compareTo比较:");int i = date1.compareTo(date2);System.out.println("i:"+i);//Calendar类//我们现在已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定部分呢,比如说小时,日,或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案是使用Calendar 类。//Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。//Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。System.out.println("Calendar类操作");System.out.println("date2:"+date2);Calendar calendar = Calendar.getInstance();calendar.setTime(date2);// 获得年份int year = calendar.get(Calendar.YEAR);System.out.println("year:"+year);// 获得月份int month = calendar.get(Calendar.MONTH) + 1;System.out.println("month:"+month);// 获得日期int date = calendar.get(Calendar.DATE);System.out.println("date:"+date);// 获得小时int hour = calendar.get(Calendar.HOUR_OF_DAY);System.out.println("hour:"+hour);// 获得分钟int minute = calendar.get(Calendar.MINUTE);System.out.println("minute:"+minute);// 获得秒int second = calendar.get(Calendar.SECOND);System.out.println("second:"+second);// 获得星期几(注意(这个与Date类是不同的):1代表星期日、2代表星期1、3代表星期二,以此类推)int day = calendar.get(Calendar.DAY_OF_WEEK);System.out.println("day:"+day);}
}