常量字段
Calendar类的常量字段是非常重要的参数,在set()、add()、get()方法中都会用到。
Calendar类中常用的常量字段如下:
常量字段 | 说明 |
---|---|
Calendar.ERA |
ERA表示纪元,只能为0或1。0表示BC(“before Christ”,即公元前);1表示AD(拉丁语“Anno Domini”,即公元)。 |
Calendar.YEAR |
表示年份 |
Calendar.MONTH |
表示月份,需要加1,因为0表示1月,1表示2月,以此类推 |
Calendar.HOUR |
小时(12小时制) |
Calendar.HOUR_OF_DAY |
一天中第几个小时(24小时制) |
Calendar.MINUTE |
分钟 |
Calendar.SECOND |
秒 |
Calendar.MILLISECOND |
毫秒 |
Calendar.DAY_OF_YEAR |
一年中第几天 |
DAY_OF_MONTH |
一月中第几天 |
DAY_OF_WEEK |
一周中第几天,注意,周日是1,周一是2,... |
Calendar.DATE |
一月中第几天,同DAY_OF_MONTH的值是一样的 |
Calendar.DAY_OF_WEEK_IN_MONTH |
当月内一周中的某天的序号 |
Calendar.WEEK_OF_YEAR |
一年中的星期数,即本年中第几个星期 |
Calendar.WEEK_OF_MONTH |
当前月中的星期数,即本月中第几个星期 |
Calendar.DAY_OF_WEEK_IN_MONTH |
当前月中的第几个星期 |
Calendar.AM_PM |
AM_PM是在中午之前还是在中午之后,在中午12点之前返回0,在中午12点(包括12点)之后返回1 |
Calendar.JANUARY |
1月 |
Calendar.FEBRUARY |
2月 |
Calendar.MARCH |
3月 |
Calendar.APRIL |
4月 |
Calendar.MAY |
5月 |
Calendar.JUNE |
6月 |
Calendar.JULY |
7月 |
Calendar.AUGUST |
8月 |
Calendar.SEPTEMBER |
9月 |
Calendar.OCTOBER |
10月 |
Calendar.NOVEMBER |
11月 |
Calendar.DECEMBER |
12月 |
获取Calendar对象
不需要通过new来创建Calendar对象,而是通过Calendar类的getInstance()静态方法。代码如下:
// 获取日历对象
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());// 将Date对象设置到Calendar对象中
常用方法
常用方法就是get、set和add方法,它们的API说明如下:
方法 | 说明 |
---|---|
int get(int field) |
用于获取日历字段的值,返回值是int类型,其中field参数的值可以是Calendar.YEAR 、Calendar.MONTH 等常量字段。 |
void set(int field, int value) |
将给定的日历字段设置为指定的值。 |
void set(int year, int month, int date) |
设置Calendar中的年、月、日字段 |
void set(int year, int month, int date, int hourOfDay, int minute) |
设置Calendar中的年、月、日、时、分字段 |
void set(int year, int month, int date, int hourOfDay, int minute, int second) |
设置Calendar中的年、月、日、时、分、秒字段 |
void add(int field, int amount) |
可以对指定的一个日历字段进行整数的偏移,比如在今年的日期基础上加上一年,就是明年这个时候的日期。其中amount可以为负数,可以表示如去年、上个月等。 |
其他方法
方法 | 说明 |
---|---|
boolean after(Object when) |
使用例如:c4.after(c3) ,判断c4的日期是否在c3的日期之后。传入的参数必须是Calendar对象。 |
boolean before(Object when) |
使用例如:c3.before(c4) ,判断c3的日期是否在c4的日期之前。传入的参数必须是Calendar对象。 |
boolean equals(Object obj) |
使用例如:c3.equals(c4) ,判断c3的日期是否等于c4所表示的日期。传入的参数必须是Calendar对象。 |
int compareTo(Calendar anotherCalendar) |
使用例如:c3.compareTo(c4) ,如果比较c3和c4,如果c3<c4则返回-1,如果c3==c4则返回0,c3>c4则返回1。 |
int getActualMaximum(int field) |
返回指定日历字段可能具有的最大值,例如:c5.getActualMaximum(Calendar.DAY_OF_MONTH) ,获取本月最后一天的号数。 |
int getActualMinimum(int field) |
返回指定日历字段可能具有的最小值,例如:c5.getActualMinimum(Calendar.DAY_OF_MONTH) ,获取本月第一天的号数。 |
long getTimeInMillis() |
返回此日历对象所表示的毫秒值。 |
int getFirstDayOfWeek() |
获取一周的第一天是什么。 |
TimeZone getTimeZone() |
获取时区。 |
Calendar对象与Date对象的相互转换
- Date对象转换成Calendar对象
// Date对象转换成Calendar对象
Calendar c2 = Calendar.getInstance();
c2.setTime(new Date());
- Calendar对象转换成Date对象
Calendar c2 = Calendar.getInstance();
// Calendar对象转换成Date对象
Date c2Date = c2.getTime();// 类似于new Date()
实例
Calendar类的实例代码如下:
public class CalendarTest {
public static void main(String[] args) {
// 获取日历对象
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
// 获取日期字段值
System.out.println(calendar.get(Calendar.ERA));// 纪元,公元前还是公元
System.out.println(calendar.get(Calendar.YEAR));// 年份
System.out.println(calendar.get(Calendar.MONTH));// 月份,需要加1,因为0表示1月,1表示2月,以此类推
System.out.println(calendar.get(Calendar.HOUR));// 小时(12小时制)
System.out.println(calendar.get(Calendar.HOUR_OF_DAY));// 一天中第几个小时(24小时制)
System.out.println(calendar.get(Calendar.MINUTE));// 分钟
System.out.println(calendar.get(Calendar.SECOND));// 秒
System.out.println(calendar.get(Calendar.MILLISECOND));// 毫秒
System.out.println(calendar.get(Calendar.DAY_OF_YEAR));// 一年中第几天
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));// 一月中第几天
System.out.println(calendar.get(Calendar.DAY_OF_WEEK));// 一周中第几天,注意,周日是1,周一是2,...
System.out.println(calendar.get(Calendar.DATE));// 一月中第几天,同DAY_OF_MONTH的值是一样的
System.out.println(calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH));// 当月内一周中的某天的序号
System.out.println("Calendar.WEEK_OF_YEAR=" + calendar.get(Calendar.WEEK_OF_YEAR));// 一年中的星期数,即本年中第几个星期
System.out.println("Calendar.WEEK_OF_MONTH=" + calendar.get(Calendar.WEEK_OF_MONTH));// 当前月中的星期数,即本月中第几个星期
System.out.println(calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH));// 当前月中的第几个星期
System.out.println("Calendar.AM_PM=" + calendar.get(Calendar.AM_PM));// AM_PM是在中午之前还是在中午之后,在中午12点之前返回0,在中午12点(包括12点)之后返回1
System.out.println(Calendar.JANUARY);// 1月
System.out.println(Calendar.FEBRUARY);// 2月
System.out.println(Calendar.MARCH);// 3月
System.out.println(Calendar.APRIL);// 4月
System.out.println(Calendar.MAY);// 5月
System.out.println(Calendar.JUNE);// 6月
System.out.println(Calendar.JULY);// 7月
System.out.println(Calendar.AUGUST);// 8月
System.out.println(Calendar.SEPTEMBER);// 9月
System.out.println(Calendar.OCTOBER);// 10月
System.out.println(Calendar.NOVEMBER);// 11月
System.out.println(Calendar.DECEMBER);// 12月
// 设置日期字段值
calendar.set(2021, Calendar.JUNE, 3);// 设定指定年月日,其中Calendar.JUNE为5实际上是六月,所以0表示1月,1表示2月,以此类推
System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(calendar.getTime()));
calendar.set(2021, Calendar.FEBRUARY, 3, 23, 55);// 设置年月日时分
System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(calendar.getTime()));
calendar.set(2021, Calendar.MARCH, 3, 23, 55, 30);// 设置年月日时分秒
calendar.set(Calendar.YEAR, 2005);// 单独设置日历字段,设置年份
calendar.set(Calendar.MONTH, 7);// 单独设置日历字段,设置月份,注意0代表1月
calendar.set(Calendar.DATE, 11);// 单独设置日历字段,设置天数
calendar.set(Calendar.HOUR_OF_DAY, 22);// 单独设置日历字段,设置小时
calendar.set(Calendar.MINUTE, 45);// 单独设置日历字段,设置分钟
calendar.set(Calendar.SECOND, 30);// 单独设置日历字段,设置秒
calendar.set(Calendar.MILLISECOND, 235);// 单独设置日历字段,设置毫秒
System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(calendar.getTime()));
// 计算日期字段值,既可以为正数,又可以为负数
calendar.add(Calendar.YEAR, 2);// 在当前日期的基础上添加年份,后年
System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(calendar.getTime()));
calendar.add(Calendar.YEAR, -1);// 在当前日期的基础上减去年份,昨年
System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(calendar.getTime()));
calendar.add(Calendar.MONTH, 1);// 添加月份,下个月
calendar.add(Calendar.MONTH, -1);// 添加月份,上个月
calendar.add(Calendar.DATE, 2);// 添加天数,后天
calendar.add(Calendar.DATE, -1);// 添加天数,昨天
calendar.add(Calendar.HOUR_OF_DAY, 1);// 添加小时,下一个小时
calendar.add(Calendar.HOUR_OF_DAY, -1);// 添加小时,上一个小时
calendar.add(Calendar.MINUTE, 20);// 添加分钟,下20分钟
calendar.add(Calendar.MINUTE, -20);// 添加分钟,上20分钟
calendar.add(Calendar.SECOND, 30);// 添加秒数,下30秒
calendar.add(Calendar.SECOND, -30);// 添加秒数,上30秒
calendar.add(Calendar.DATE, 7);// 添加周数,即添加7天,下一周
calendar.add(Calendar.DATE, -7);// 添加周数,上一周
System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(calendar.getTime()));
// Calendar对象与Date对象的相互转换
// Date对象转换成Calendar对象
Calendar c2 = Calendar.getInstance();
c2.setTime(new Date());
// Calendar对象转换成Date对象
Date c2Date = c2.getTime();// 类似于new Date()
// 其他方法,如after、before
Calendar c3 = Calendar.getInstance();
c3.set(Calendar.YEAR, 2005);
Calendar c4 = Calendar.getInstance();
boolean after = c4.after(c3);// 判断c4的日期是否在c3之后
System.out.println(after);
boolean before = c3.before(c4);
System.out.println(before);// 判断c3的日期是否在c4之前
boolean equals = c3.equals(c4);// 判断c3的日期是否等于c4
System.out.println(equals);
int result = c3.compareTo(c4);// 如果比较c3和c4,如果c3<c4则返回-1,如果c3==c4则返回0,c3>c4则返回1
System.out.println(result);
Calendar c5 = Calendar.getInstance();
c5.clear();
c5.set(Calendar.YEAR, 2017);
c5.set(Calendar.MONTH, 1);
c5.set(Calendar.DAY_OF_MONTH, 30);
System.out.println(c5.getTime());
int lastDay = c5.getActualMaximum(Calendar.DAY_OF_MONTH);// 获取本月最后一天的号数
int firstDay = c5.getActualMinimum(Calendar.DAY_OF_MONTH);// 获取本月第一天的号数
System.out.println("本月最后一天:" + lastDay + ", 本月第一天:" + firstDay);
// 获取毫秒数
long timeInMillis = calendar.getTimeInMillis();// 返回此Calendar的时间值,以毫秒为单位
int firstDayOfWeek = calendar.getFirstDayOfWeek();// 获取一个星期中的第一天
System.out.println(firstDayOfWeek);
TimeZone timeZone = calendar.getTimeZone();// 获取时区
System.out.println(timeZone.getDisplayName());
}
}