java基础之日期时间

        java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date 对象。

1、构建

第一个构造函数使用当前日期和时间来初始化对象:Date( )

第二个构造函数接收一个参数,该参数是从 1970 年 1 月 1 日起的毫秒数:Date(long millisec)

 2、调用方法

序号方法和描述
1boolean after(Date date)
若当调用此方法的Date对象在指定日期之后返回true,否则返回false。
2boolean before(Date date)
若当调用此方法的Date对象在指定日期之前返回true,否则返回false。
3Object clone( )
返回此对象的副本。
4int compareTo(Date date)
比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。
5int compareTo(Object obj)
若obj是Date类型则操作等同于compareTo(Date) 。否则它抛出ClassCastException。
6boolean equals(Object date)
当调用此方法的Date对象和指定日期相等时候返回true,否则返回false。
7long getTime( )
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
8int hashCode( )
 返回此对象的哈希码值。
9void setTime(long time)
 
用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期。
10String 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
aA.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);}
}