一、Calendar介绍
Calendar类是一个日历抽象类,提供了一组对年月日时分秒星期等日期信息的操作的函数,并针对不同国家和地区的日历提供了相应的子类,即本地化。从JDK1.1版本开始,在处理日期和时间时,系统推荐使用Calendar类进行实现(Date的一些方法都过时了)。在设计上,Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。
Calender类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance()方法创建即可。
为了更加便捷的对日期进行操作,Calendar类对YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。
需要特别注意的是,Calendar 的 month 从 0 开始,也就是全年 12 个月由 0 ~ 11 进行表示。
二、Calendar常量
Calendar.ERA=0
//年
Calendar.YEAR=1
//月
Calendar.MONTH=2
//当前时间是所在当前年的第几个星期
Calendar.WEEK_OF_YEAR=3
//当前时间是所在当前月的第几个星期
Calendar.WEEK_OF_MONTH=4
//当前时间为多少号(日历式的多少号)
Calendar.DATE=5
//一月中的第几天,结果等同于Calendar.DATE
Calendar.DAY_OF_MONTH=5
//一年中的第几天
Calendar.DAY_OF_YEAR=6
//一周7天当中,当前时间是星期几
Calendar.DAY_OF_WEEK=7
//当前时间是所在当前月的第几个星期,以月份天数为标准,一个月的1号为第一周,8号为第二周
Calendar.DAY_OF_WEEK_IN_MONTH=8
//上午和下午
Calendar.AM_PM=9
//小时(12小时制)
Calendar.HOUR=10
//小时(24小时)
Calendar.HOUR_OF_DAY=11
//分
Calendar.MINUTE=12
//秒
Calendar.SECOND=13
//毫秒
Calendar.MILLISECOND=14
// 以毫秒为单位指示距 GMT 的大致偏移量。
Calendar.ZONE_OFFSET=15
// 以毫秒为单位指示夏令时的偏移量。
Calendar.DST_OFFSET=16
//星期天
Calendar.SUNDAY=1
//星期一
Calendar.MONDAY=2
//星期二
Calendar.TUESDAY=3
//星期三
Calendar.WEDNESDAY=4
//星期四
Calendar.THURSDAY=5
//星期五
Calendar.FRIDAY=6
//星期六
Calendar.SATURDAY=7
//一月
Calendar.JANUARY=0
//二月
Calendar.FEBRUARY=1
//三月
Calendar.MARCH=2
//四月
Calendar.APRIL=3
//五月
Calendar.MAY=4
//六月
Calendar.JUNE=5
//七月
Calendar.JULY=6
//八月
Calendar.AUGUST=7
//九月
Calendar.SEPTEMBER=8
//十月
Calendar.OCTOBER=9
//十一月
Calendar.NOVEMBER=10
//十二月
Calendar.DECEMBER=11
//描述十三月(某些时候有用)
Calendar.UNDECIMBER=12
//上午
Calendar.AM=0
//下午
Calendar.PM=1
三、常用方法使用示例
import java.util.Calendar;
/**
* Created by zjx on 2016/5/02.
*/
public class CalendarTest {
public static void main(String[] args) {
//获取Calendar对象
Calendar calendar = Calendar.getInstance();
// 获取年
int year = calendar.get(Calendar.YEAR);
System.out.println("今年是" + year+"年");
// 获取月,这里需要注意月份的范围为0~11,因此获取月份的时候需要+1才是当前月份值
int month = calendar.get(Calendar.MONTH) + 1;
System.out.println("本月" + month+"月");
// 获取日
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("今天是" + day+"日");
// 获取时:Calendar.HOUR是12小时制 Calendar.HOUR_OF_DAY 24小时制
int hour = calendar.get(Calendar.HOUR);
System.out.println("当前是" + hour+"小时");
// 获取分
int minute = calendar.get(Calendar.MINUTE);
System.out.println("当前是" + minute+"分");
// 获取秒
int second = calendar.get(Calendar.SECOND);
System.out.println("当前是" + minute+"秒");
// 星期,英语国家星期从星期日开始计算
int weekday = calendar.get(Calendar.DAY_OF_WEEK)-1;
System.out.println("今天是星期" + weekday);
// 今年的第 N 天
int DAY_OF_YEAR = calendar.get(Calendar.DAY_OF_YEAR);
System.out.println("今天是今年的第" + DAY_OF_YEAR+"天");
// 本月第 N 天
int DAY_OF_MONTH = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("今天是本月的第" + String.valueOf(DAY_OF_MONTH)+"天");
// 3小时以后
calendar.add(Calendar.HOUR_OF_DAY, 3);
int HOUR_OF_DAY = calendar.get(Calendar.HOUR_OF_DAY);
System.out.println("三小时以后是" + HOUR_OF_DAY+"小时");
// 15 分钟以后
calendar.add(Calendar.MINUTE, 15);
int minute_15 = calendar.get(Calendar.MINUTE);
System.out.println("十五分钟以后是" + minute_15+"分钟");
// 30分钟前
calendar.add(Calendar.MINUTE, -30);
int minute_30 = calendar.get(Calendar.MINUTE);
System.out.println("三十分钟之前是" + minute_30+"分");
// 5天后
calendar.add(Calendar.DATE,5);
int day_5 = calendar.get(Calendar.DATE);
System.out.println("五天后是" + day_5+"日");
}
}
打印结果是:
今年是2016年
本月5月
今天是2日
当前是5小时
当前是32分
当前是32秒
今天是星期1
今天是今年的第123天
今天是本月的第2天
三小时以后是20小时
十五分钟以后是47分钟
三十分钟之前是17分
五天后是24日