在Java程序中,涉及到日期处理时,我们通常用Date类和Calendar类,以下就两个类进行比较分析:
一、Date类:
Date类用来封装日期和时间,在JDK1.0中,是唯一用来处理时间日期的类,自JDK1.1及之后,Java推荐使用Calendar类来代替Date类处理时间和日期。
1、Date类构造函数初始化对象
Date类提供了两个构造函数来实例化对象,如下所示:
Date date= new Date(); 使用当前日期和时间来初始化对象;
Date(Long time); 使用自1970年1月1日起计算的毫米数作为参数来初始化对象;
案例:
public class time {
public static void main(String[] args) {
Date date = new Date(); //Fri Feb 22 03:55:02 CST 2019
System.out.println(date);
//获取自1970年1月1日以来到现在经历的毫秒数
Long time = System.currentTimeMillis();
//将从1970年1月1日以来的毫秒数作为参数,获取当前时间
Date date1 = new Date(time); //Fri Feb 22 03:59:51 CST 2019
System.out.println(date1);
}
}
2、Date类获取时间信息:
在Date类中,通过它的get方法获取时间相关信息,需要注意的是,自JDK1.1版本后,很多get方法已经过时,不再被推荐使用。因为年份从1900年开始算起,月份从0开始算起,因此使用get方法获取年份时需要加上1900,获取月份信息时需要加1,除此之外,Date的星期日到星期六以数字0-6来表示。以下为示例:
public class time {
public static void main(String[] args) {
Date date = new Date();
int year = date.getYear()+1900;
int month = date.getMonth()+1;
int date1 = date.getDate();
int hour = date.getHours();
int minute = date.getMinutes();
int second = date.getMinutes();
int day = date.getDay();
switch(day) {
case 0:
System.out.println("今天是周日");
break;
case 1:
System.out.println("今天是周一");
break;
case 2:
System.out.println("今天是周二");
break;
case 3:
System.out.println("今天是周三");
break;
case 4:
System.out.println("今天是周四");
break;
case 5:
System.out.println("今天是周五");
break;
default:
System.out.println("今天是周六");
}
System.out.println("现在是"+year+"年"+month+"月"+date1+"日"+hour+"时"+minute+"分"+second+"秒");
}
}
3、Date对象的前后比较:
Date类中提供了几种方法用来比较两个时间,如下所示:
Boolean after(Date date);
若当调用此方法的Date对象在指定日期之后返回true,否则返回false。
Boolean before(Date date);
若当调用此方法的Date对象在指定日期之前返回true,否则返回false。
Boolean equals(Date date);
当调用此方法的Date对象和指定日期相等时候返回true,否则返回false。
int compareTo(Date date);
比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。
4、Date中时间毫秒数和日期互相转化:
public class time {
public static void main(String[] args) {
Date date = new Date();
//Fri Feb 22 04:28:59 CST 2019
System.out.println(date);
Long time = date.getTime();
//1550780939648
System.out.println(time);
Long time1 = time+1000000;
Date date1 = new Date(time1);
//Fri Feb 22 04:45:39 CST 2019
System.out.println(date1);
}
}
二、Calendar类:
自JDK1.1版本后,Calendar类被广泛用来处理与时间和日期相关的数据。Calender类是一个抽象类,在实际使用时实现特定的子类的对象,只需要使用getInstance()方法创建即可。Calendar类能设置和获取日期数据的特定部分并为这些部分加上特定的值,以下为Calendar类的详细介绍:
1、创建一个代表系统当前日期的Calendar对象:
public static void main(String[] args) {
Calendar date = Calendar.getInstance();
System.out.println(date);
}
当然根据calendar获取的对象,不能直观的看出时间,我们更多地是用来对时间进行处理,获取具体信息。
2、创建一个指定日期的Calendar对象:
public static void main(String[] args) {
Calendar date = Calendar.getInstance();
date.set(2019,5-1,22);
System.out.println(date);
}
3、Calendar类中用多个常量来表示特定的数据,并可以配合get方法,获得我们需要的数据,如下所示:
Calendar.YEAR:年份;
Calendar.MONTH:月份;
Calendar.DATE:日期;
Calendar.DAY_OF_MONTH:日期,等同于Calendar.DATE;
Calendar.HOUR:12小时制的小时;
Calendar.HOUR_OF_DAY:24小时制的小时;
Calendar.MINUTE:分钟;
Calendar.SECOND:秒
Calendar.DAY_OF_WEEK:星期几(Calendar中周日从1开始计算,区别于Date类)
Calendar.DAY_OF_YEAR:今年第多少天
Calendar.WEEK_OF_YEAR:今天第多少周
案例如下,更多可参考API :
public static void main(String[] args) {
Calendar date = Calendar.getInstance();
int year = date.get(Calendar.YEAR);
int month = date.get(Calendar.MONTH);
int date1 = date.get(Calendar.DATE);
int hour = date.get(Calendar.HOUR);
int minute =date.get(Calendar.MINUTE);
int second = date.get(Calendar.SECOND);
今年的第53天
int date2 = date.get(Calendar.DAY_OF_YEAR);
今年的第8周
int week2 = date.get(Calendar.WEEK_OF_YEAR);
System.out.println(date2+","+week2);
}
4、Calendar类可以获取具体的日期和时间信息,同时也可以对日期和时间进行设置,设置使用set方法:
public final void set (int year,int month,int date)
如果只设定某个字段,例如日期的值,则可以使用如下set方法:
public void set(Calendar.DATE,20);
5、Calendar类可以对日期和时间进行设置,也可以对日期和时间进行增减,使用add方法,案例如下:
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH,5); 7月份
System.out.println(calendar.get(Calendar.MONTH));
calendar.add(Calendar.MONTH, -3); 4月份
System.out.println(calendar.get(Calendar.MONTH));
}