一、什么是Date类?
定义:Date就是关于时间的一个类,这个类主要就是一些对时间的设置以及操作,查阅官方文档可知,Date类继承自java.lang.Object 类。
二、常用的方法
1.Date中的方法
Date():无参构造,分配一个 Date对象并将它初始化,它代表的时间分配给它,测量精确到毫秒。
import java.util.Date; //因为这个类属于util包内,所以需要事先导入
public class DateTest {
public static void main(String[] args) {
Date d = new Date(); //无参构造
System.out.println(d);
//输出的是CST为中国标准时间,还有就是输出的是当前系统的时间
}
}
Date(long date):有参构造
首先一秒等于1000毫秒,这个有参构造就是分配一个 Date对象并将它初始化为代表指定的毫秒数自基准时间被称为格林威治时间,即1970年1月1日,00:00:00 GMT。也就是传入一个毫秒数,然后从1970年1月1日,00:00:00 开始增加输入的时间。
import java.util.Date; //因为这个类属于util包内,所以需要事先导入
public class DateTest {
public static void main(String[] args) {
Date d = new Date(); //无参构造
System.out.println(d);
//输出的是CST为中国标准时间,还有就是输出的是当前系统的时间
//有参构造
Date d1 = new Date(5000); //5000毫秒就是5秒
System.out.println(d1);
//输出:Thu Jan 01 08:00:05 CST 1970 这个叫“格林威治时间”
//为什么我这里数输出08:00:05呢? 注意看,我的是CST中国标准时间,中国属于东八区,所以需要+8
//其实换算到GMT(格林威治时间)就是-8,也就是00:00:05,没有问题的
}
}
Date类的方法:
getTime(): 来获取毫秒数,其返回值类型是long,其可以把日期对象转成毫秒值。返回long类型的
Date
对象表示的1970年1月1日00:00:00 GMT以来的毫秒数。
import java.util.Date;
public class DateTest {
public static void main(String[] args) {
Date d = new Date();
System.out.println(d.getTime());
//输出:1754175298235
//这个数值就是从1970-1-1 00:00:00开始计算的毫秒值
}
}
hashCode():返回此对象的哈希代码值,其实这个用处不大,了解即可
public class DateTest {
public static void main(String[] args) {
Date d = new Date();
System.out.println(d.getTime());
//输出:1754175298235
//这个数值就是从1970-1-1 00:00:00开始计算的毫秒值
System.out.println(d.hashCode());//输出:1828758003 哈希码值
}
}
equals(Object obj) :比较两个相等的日期
import java.util.Date;
public class CompareDate {
public static void main(String[] args) {
//比较两个时间
Date d = new Date();
Date d1 = new Date();
System.out.println(d.equals(d1));
//输出:true,因为同时创建了两个对象,都是当前时间,因为计算机运行速度很快,甚至没有一毫秒
//所以两个时间是相同的
}
}
根据以上,
after(Date when):测试如果这个日期是在指定日期之后返回true,否则false
before(Date when) :测试如果这个日期是在指定日期之前返回true,否则false
但是我们会发现,Date类不能输出类似于普遍的时间格式:比如2021年01=年01日 13时00分,所以我们需要Calenda类。
2.Calendar
calendar类位于java.util包中,它提供多个方法获取,设置,增加日历字段值,比Date类更强大,calendar是抽象类,所以不能直接使用new去新建对象。
所以我们需要使用到GregorianCalendar类,这个类也是Calenda的子类,提供了世界上大多数使用标准的日历系统。
使用该类获得当前年份、月份和当前是周几的代码
import java.util.Calendar;
import java.util.GregorianCalendar;
public class CalendarDate {
public static void main(String[] args) {
//新建一个GregorianCalendar 对象
GregorianCalendar g = new GregorianCalendar();
int year = g.get(Calendar.YEAR);
//使用GregorianCalendar 的get方法,获取当前月份
int month = g.get(Calendar.MONTH);
// 使用GregorianCalendar 的get方法,获取当前日期
int day = g.get(Calendar.DAY_OF_MONTH);
System.out.println(year+"年"+month+"月"+day+"日");
//输出:2025年7月3日
//解释:月份是从0开始计算的,所以0代表一月,11代表12月。月份返回为0-11
//解决方法:
System.out.println(year+"年"+(month+1)+"月"+day+"日"); //在月份后面+1即可
// 输出:2025年8月3日 就是当天的日期了
}
}
get方法:
也可以使用GregorianCalendar 输出更具体的时间格式:
比如输出年月日时分秒,这也是一般网页和系统都会显示的时间:(完整代码)
import java.util.Date;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class GetDateTest {
public static void main(String[] args) {
Date a = new Date();
GregorianCalendar g = new GregorianCalendar();
int year = g.get(Calendar.YEAR);
int month = g.get(Calendar.MONTH);
int day = g.get(Calendar.DAY_OF_MONTH);
int hour = g.get(Calendar.HOUR_OF_DAY);
int min = g.get(Calendar.MINUTE);
int second = g.get(Calendar.SECOND);
System.out.println(year+"年"+(month+1)+"月"+day+"日"+hour+"时"+min+"分"+second+"秒");
}
}
//输出:当前的时间 2025年8月3日7时19分50秒
set方法:
上面我们用到的是get方法,那当然也有对应的set方法,来设置一下自定义的时间,以设置为2020年1月1日为例
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class SetDateTest {
public static void main(String[] args) {
//上面我们用到的是get方法,那当然也有对应的set方法,
// 来设置一下自定义的时间,以设置为2020年1月1日为例:
Date a = new Date();
GregorianCalendar g = new GregorianCalendar();
g.set(Calendar.YEAR,2020);
g.set(Calendar.MONTH,0); //千万不要忘了月份的起始值为 0,0代表一月
g.set(Calendar.DAY_OF_MONTH,1);
//g.set(Calendar.DAY_OF_MONTH,35); //日期输入35天 //输出:2020年2月4日 因为2月只有28天
//这个日期35的意思是,在设置时间中若把月份输入大于11或者天数设置大于30天或31天(2月大于28天),
// 那么将会自动往前进一:
// 输入是1月份,但是天数大于真实一个月的天数,所以会增加一个月
int year = g.get(Calendar.YEAR);
int month = g.get(Calendar.MONTH);
int day = g.get(Calendar.DAY_OF_MONTH);
int hour = g.get(Calendar.HOUR_OF_DAY);
int min = g.get(Calendar.MINUTE);
int second = g.get(Calendar.SECOND);
System.out.println(year+"年"+(month+1)+"月"+day+"日"+hour+"时"+min+"分"+second+"秒");
}
}
3.SimpleDateFormat
但是在实际应用过程中,可能对时间的格式要求不一样,比如有:
2020/01/01 12:00:00
2020-01-01 星期* 上/下午
2020年01月01日 12时00分00秒
所以我们不可能在每一次需要不一样的格的时候再去重新写代码,所以Java提供了这个SimpleDateFormat类。
API中的时间格式:
第二个SimpleDateFormat(String pattern) :使用给定的模式和默认的日期格式符号默认 FORMAT现场构建了一个 SimpleDateFormat,意思是根据你给定的格式符号来创建这个时间的对象
//伪代码
public static String dateToString(Date d,String pattern){
//新建一个静态方法
SimpleDateFormat s = new SimpleDateFormat(pattern);
//有参构造
String time = s.format(d);
//SimpleDateFormat的format方法:给定的 Date进入日期/时间线和附加的结果给出的 StringBuffer格式。
return time; //返回时间
}
代码理解:其实这个方法就是传入一个Date类的时间,和SimpleDateFormat有参构造方法需要的一个参数pattern,也就是格式符,根据上那张表格查看需要什么格式即可,然后使用format方法即可。
代码如下:
import java.text.SimpleDateFormat; //记得要导入哦
import java.util.Date;
public class SimpleDateFormatTest {
public static void main(String[] args) {
Date d = new Date(); //创建方法需要的对象Date d
String t = dateToString(d,"yyyy-MM-dd HH:mm:ss: E a"); //E代表周几,a代表上/下午
System.out.println(t); //使用方法
}
private static String dateToString(Date d, String pattern) {
SimpleDateFormat s = new SimpleDateFormat(pattern);
String time = s.format(d);
return time;
}
}
//输出:2025-08-03 07:43:04: 星期日 上午
//想要输出其他格式可根据API里的格式调整输出格式即可。
//输出:"yyy年MM月dd日 HH时mm分ss秒 E a"
//输出:2022年01月14日 15时45分06秒 星期五 下午"yyyy/MM/dd HH:mm:ss E a"
//输出:2022/01/14 15:45:36 星期五 下午"MM/dd/yyyy HH:mm:ss" //甚至把年份方后面
//输出:01/14/2022 15:46:24 //可以根据需要,结合上面的符号表,去自定义想要的时间格式