一、Calendar类静态常量
ERA | 纪元 | 值为:0、1。0表示BC(“before Christ”,即公元前),1表示AD(拉丁语“Anno Domini”,即公元) |
YEAR | 当前日期对应的年份 | |
MONTH | 当前日期对应的月份 | 值从0开始,范围0-11。注意:从0开始 |
WEEK_OF_YEAR | 属于当年第几周 | 值从1开始,范围1-52 |
WEEK_OF_MONTH | 属于当月第几周(自然周) | 值为1-6。1号是星期几这周就从星期几开始,第一周可能不完整。如果一号是星期六,那么第一周只有周六这一天,周日就变成第二周。注意:一周是从周日开始,周六结束的。 |
DAY_OF_WEEK_IN_MONTH | 属于当月第几周(七天为一周) | 值为1-5。每月1号到7号是第一周,七天一周依次类推。 |
DAY_OF_YEAR | 在当年属于第几天 | 值为1-366 |
DAY_OF_MONTH | 在当月属于第几天 | 值从1开始,范围1-31 |
DATE | 在当月属于第几天 | 同上DAY_OF_MONTH |
DAY_OF_WEEK | 当周属于第几天 | 即星期几 注意:星期日为一周的第一天,周六是最后一天。 |
AM_PM | 上下午 | 可以是AM 或 PM。AM为0,表示上午;PM为1,表示下午 |
HOUR | 一天中的第几小时 | 用于 12 小时制时钟,范围0 - 11 |
HOUR_OF_DAY | 一天中的第几小时 | 用于 24 小时制时钟,范围0-23 |
MINUTE | 一小时中的第几分钟 | 值为0-60 |
SECOND | 一分钟中的第几秒 | 值为0-60 |
MILLISECOND | 一秒中的第几毫秒 | 值为0-999 |
ZONE_OFFSET | 距 GMT 的大致偏移量 | 毫秒为单位 |
DST_OFFSET | 夏令时的偏移量 | 毫秒为单位 |
测试验证:
public static void main(String[] args) { System.out.println("纪元:" + cal.get(Calendar.ERA)); |
19-7-7 下午11:59 纪元:1 年:2019 月:6 当年的第几周:28 当月的第几周:2 当月的第几周:1 当年的第几日:188 几号:7 星期:1 几号:7 上下午:1 时12:11 时24:23 分:59 秒:59 毫秒:941 |
注意:
1、MONTH 月是0-11之间,使用月时需要加一,cal.set(2019,6,7, 23, 59, 59)第二个参数6其实是在设置7月。
2、DAY_OF_WEEK 一周的开始是从周日开始,周六结束。1代表是周日,2才是周一。
3、2019-7的第一周是从星期一开始,所以WEEK_OF_MONTH计算的第一周是1~6号,第一周只有六天;而DAY_OF_WEEK_IN_MONTH计算的第一周永远是1~7号。
二、Calendar的方法
get(int field) | 获取指定参数的值。 如:获取月cal.get(Calendar.MONTH) |
set(int field, int value) | 设置指定参数的值。 如:设置月为七月:cal.set(Calendar.MONTH, 6); 注意:月是从0开始 |
add(int field, int value) | 给指定参数累加值,值可以是正数或负数。 如:给月加一 cal.add(Calendar.MONTH, 1) 注意:如果当前月已经是11(即12月),月加一后就会变成下一年一月,即上一位会进一。 |
roll(int field, int value) | 同上,但是这个方法给时间某一项累加后不会造成上一位的变化,给月加减不会造成年的变化。 |
clear(int field) | 清除某一项的值,将其值置为最小。 |
isSet(int field) | 如用clear清除后,会返回false. |
getMaximum(int field) | 获取最大值,如参数是日,不管是几月,获取的日最大值都是31。 |
getActualMaximum(int field) | 获取实际最大值,如参数是日,当前时间是7月,日的最大值是31,六月的最大值是30。 |
getMinimum(int field) | 获取最小值。 |
getActualMinimum(int field) | 获取最小值,同上。 |
方法测试:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
//1、set方法的使用
cal.set(2019, 05, 31); //月取值是0-11。05其实是在设置六月
System.out.println(sdf.format(cal.getTime())); //设置为6月31日,输出:2019-07-01
cal.set(2019, 05, -1);
System.out.println(sdf.format(cal.getTime()));//设置日为-1,输出:2019-05-30
//2、add方法、roll方法
cal.set(2019, 05, 30); //6.30
cal.add(Calendar.DATE,1);//日加一
System.out.println(sdf.format(cal.getTime()));//add会造成上一位值的变化,输出:2019-07-01
cal.set(2019, 05, 30); //6.30
cal.roll(Calendar.DATE,1); //日加一
System.out.println(sdf.format(cal.getTime()));//roll只会改变指定项的变化,时间从新回到一号,月不变。
//输出:2019-06-01
//3、getMaximum、getActualMaximum
cal.set(2019, 05, 01); //6.30
System.out.println(cal.getMaximum(Calendar.DATE)); //输出:31
System.out.println(cal.getActualMaximum(Calendar.DATE)); //输出:30。六月实际只有30天
//4、getMinimum、getActualMinimum
System.out.println(cal.getMinimum(Calendar.DATE));//输出:1
System.out.println(cal.getActualMinimum(Calendar.DATE));//输出:1
参考于:https://blog.csdn.net/cqx13763055264/article/details/81088635