由于Date类过于古老,许多的构造器和方法都已经过时。Java推荐使用Calendar来完成时间计算等操作。
PS: Calendar类
是一个抽象类(Java中时间计算都要用这个类来计算)
是一个不允许new的类(抽象类不允许new)
但是可以通过他的getInstance的方法,拿到它的createCalendar创建一下它的子实例
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 星期几
常用方法演示:
import java.util.Calendar;
import java.util.Date;
public static void main(String[] args) {
// 是一个不允许new的类(抽象类不允许new)
// 但是可以通过他的getInstance的方法,拿到它的createCalendar创建一下它的子实例
// 使用默认时区和语言环境获得一个日历
Calendar cal = Calendar.getInstance();//一般这样就可以拿到了
System.out.println("---------获取时间----------");
// 获取时间
System.out.println("年:" + cal.get(Calendar.YEAR));//YEAR年
System.out.println("月:" + (cal.get(Calendar.MONTH) + 1)); // 月是从0开始(0~11),所以需要+1
System.out.println("日:" + cal.get(Calendar.DAY_OF_MONTH));//日(一个月的某一天)
System.out.println("时:" + cal.get(Calendar.HOUR_OF_DAY));//时
System.out.println("分:" + cal.get(Calendar.MINUTE));//分
System.out.println("秒:" + cal.get(Calendar.SECOND));//秒
System.out.println("---------设置时间----------");
// 设置时间(有两种)
//1、使用set一次设置
// cal.set(year, month, date, hourOfDay, minute, second);//月是从0开始(0~11)
cal.set(2019, 4, 4, 4, 4, 4);//只能设置到秒
// 输出结果月份是三月
System.out.println(cal.getTime());
//2、单个字段一一设置
cal.set(Calendar.YEAR, 2019);
cal.set(Calendar.MONTH, Calendar.MAY);//使用英文的十二个月的单词(单词形式)传的是常量
cal.set(Calendar.DAY_OF_MONTH, 4);
cal.set(Calendar.HOUR_OF_DAY, 4);
cal.set(Calendar.MINUTE, 4);
cal.set(Calendar.SECOND, 4);
System.out.println(cal.getTime());
//
System.out.println("---------时间计算----------");
//时间计算(也是两个方法)
System.out.println("----add----");
//add方法(添加。比较强大的方法)
cal.add(Calendar.MONTH, 5);//+5个月
System.out.println(cal.getTime());
cal.add(Calendar.MONTH, -5);
System.out.println(cal.getTime());
//
System.out.println("----roll----");
//roll方法
cal.roll(Calendar.MONTH, 5);//+5个月
System.out.println(cal.getTime());
cal.roll(Calendar.MONTH, -5);
System.out.println(cal.getTime());
//
//add方法会产生其他相关时间属性的连动变化(按日期时间格式进制年月等)
//roll方法只是对相应时间属性的域内做变化
System.out.println("----add 和 roll的区别----");
Calendar calAdd = Calendar.getInstance();
calAdd.add(Calendar.MONTH, 9);
System.out.println(calAdd.getTime());
//
Calendar calRoll = Calendar.getInstance();
calRoll.roll(Calendar.MONTH, 9);
System.out.println(calRoll.getTime());
//
//Calendar和Date的相互转换
System.out.println("Date和Calendar 的相互转换");
//Calendar---> Date
Date date1=cal.getTime();
//Date--->Calendar
//Calendar与String之间的转换需要以Date作为中间桥梁
Calendar cal2=Calendar.getInstance();
cal2.setTime(date1);
演示结果: