介绍
java.util.Date 类的很多方法都被 废弃 了,由 Calendar 取代
Calendar是一个抽象类,用于表示日历,是所有日历类的模板,Java本身提供了一个GregorianCalendar类,它代表了通常说的公历。
Calendar是一个抽象类,所以不能使用构造器来创建Calendar对象。但提供了几个静态的 getInstance() 方法来获取Calendar对象,这些方法根据 TimeZone,Locale 类来获取特定的 Calendar ,如果不指定 TimeZone 和 Locale,则使用默认的 TimeZone 和 Locale 来创建 Calendar
Calendar 和 Date
都是表示日期的工具类,可以自由转换:
Calendar 转 Date:
Calendar calendar = Calendar.getInstance();
//从calendar对象中取出Date对象
Date date = calendar.getTime();
Date 转 Calendar:
//通过Date对象获得对应的Calendar对象
Calendar calendar1 = Calendar.getInstance();
calendar1.setTime(date);
获取年月日时分秒
通过 get() 方法,搭配 静态常量 使用
例子
// 使用默认时区和语言环境获得一个对象
Calendar cal = Calendar.getInstance();
System.out.println("年:" + cal.get(Calendar.YEAR));
// 注意月份从0开始,所以取月份要+1
System.out.println("月:" + (cal.get(Calendar.MONTH) + 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));
注意月份
月份从0开始,所以取月份要+1
System.out.println("月:" + (cal.get(Calendar.MONTH) + 1));
注意星期几
System.out.println("星期:" + (calendar.get(Calendar.DAY_OF_WEEK) -1));
返回值:1--7,意思是:
1 表示星期日2 表示星期一3 表示星期二4 表示星期三
….7 表示星期六
获取某年2月最后一天
Calendar calendar=Calendar.getInstance(); //获得实例Calendar对象
calendar.set(Calendar.YEAR, 2021));
calendar.set(Calendar.MONTH,1);
//获得该月的最后一天
int end=calendar.getActualMaximum(calendar.DAY_OF_MONTH);
设置时间
通过以下方法设置时间:
- set(int field, int value)
- set(int year, int month, int date)
- set(int year, int month, int date, int hourOfDay, int minute)
- set(int year, int month, int date, int hourOfDay, int minute, int second
例子
月份的下标从 0 开始,设置时同样需要注意,比如设置:2018-02-15 23:59:59
Calendar cal = Calendar.getInstance();
// 一次设置年月日时分秒,由于月份下标从0开始赋值月份要-1
// cal.set(year, month, date, hourOfDay, minute, second);
cal.set(2018, 1, 15, 23, 59, 59);
或者
// 由于月份下标从0开始赋值月份要-1
cal.set(Calendar.YEAR, 2018);
cal.set(Calendar.MONTH, Calendar.FEBRUARY);
cal.set(Calendar.DAY_OF_MONTH, 15);
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
System.out.println(cal.getTime());
时间计算
通过下面方法实现计算
- add(int field, int amount)
- field 静态常量
- amount 正数表示未来的时间,负数表示之前的时间
例子
增加1秒
Calendar cal = Calendar.getInstance();
System.out.println(cal.getTime());
cal.add(Calendar.SECOND, 1);//增加1秒
System.out.println(cal.getTime());
增加月份
超出最大值时会自动调整成正确的日期:
Calendar cal = Calendar.getInstance();
cal.set(2020, 1, 31, 8, 0, 0);
System.out.println(cal.getTime());
cal.add(Calendar.MONTH, 1);
System.out.println(cal.getTime());