1. Claendar
这是JDK提供给我们对日期操作的一个类,我们常用它来进行日期的基本操作。我是使用newInstence()方法来获得实例对象。
Calendar calendar = Calendar.getInstance();
2.设置日期的操作
通常设置日期会使用 Set
和 Add
这两个方法。
Set方法
set(你想设置的域,你想设置的值);比如下面的方法 我想10天之后的date。这是重新赋值
@Test
public void test2(){
//获得当前月的 10天后
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH,calendar.get(Calendar.DAY_OF_MONTH)+10);
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()));
}
Add方法
add(你想增加的域,想增加的值);同样是获取当前时间 10天后的date。这是在原来的基础上 ,加上值
@Test
public void test3(){
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH,10);
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()));
}
上述两种方法的执行结果相同。但是这两个方法在处理的方式上也存在坑
3.踏坑
例如:当前日期为 2020-03-31日 我们把该月份 设置成 4 获得下月月末 日期 那么会发生什么? 结果会变成 04-31
注意:日期的 起始是从0 开始
@Test
public void test4(){
Calendar calendar = Calendar.getInstance();
calendar.set(2020,2,31);
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()));
calendar.add(Calendar.MONTH,1);
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()));
}
@Test
public void test5(){
Calendar calendar = Calendar.getInstance();
calendar.set(2020,2,31);
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()));
calendar.set(Calendar.MONTH,calendar.get(Calendar.MONTH)+1);
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()));
}
执行结果:
Add方法
2020-03-31 12:43:42
2020-04-30 12:43:42
Set方法
2020-03-31 12:44:55
2020-05-01 12:44:55
因为 03-31 月份加 1 之后 会变成 04-31 但是我们发现:Add方法会只会设置到月末;而Set方法会自动顺延为下一日也就是05-01
4.获得某月的最大日期
public String testMaxMoth(int year ,int month){
Calendar instance = Calendar.getInstance();
instance.set(Calendar.YEAR,year);
instance.set(Calendar.MONTH,month-1);
// 获得该月份日期号 的最大值
int actualMaximum = instance.getActualMaximum(Calendar.DAY_OF_MONTH);
instance.set(Calendar.DAY_OF_MONTH,actualMaximum);
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(instance.getTime());
}