2019-05-31 1514 星期五
Calendar工具类
1.获取指定年月的第一天和最后一天
2.指定多少小时之前或者之后的时间
3.指定多少分钟之前或者之后的时间
注意点notic:
Calendar类当你set的时候,并不会立即生效,只有等你get的时候才会生效
实例化Calendar之后,执行clear方法,清除Calendar中的缓存,
验证方式写个for,执行多次,出现日期错误,不符合实际要求的日期
/**
* 得到系统年
* @return
* @author enAn 2019-05-31 星期五
*/
public static int getSystemYear() {
Calendar cal = Calendar.getInstance();
cal.clear();//实例化Calendar之后,执行clear方法,清除Calendar中的缓存
cal.setTime(new Date());
int year = cal.get(Calendar.YEAR);
return year;
}
/**
* 获取指定日期,多少分钟的时间
* @param date
* @param min 分钟:负数=之前的时间,正数=之后的时间
* @return
*/
public static Date getDateByMin(Date date,int min) {
Calendar cal = Calendar.getInstance();
cal.clear();//实例化Calendar之后,执行clear方法,清除Calendar中的缓存
cal.setTime(date);
cal.add(Calendar.MINUTE, min);// 3分钟之前的时间
return cal.getTime();
}
/**
* 获取指定日期,多少分钟的时间
* @param date
* @param min 分钟:负数=之前的时间,正数=之后的时间
* @return
*/
public static Date getDateByHour(Date date,int hour) {
Calendar cal = Calendar.getInstance();
cal.clear();//实例化Calendar之后,执行clear方法,清除Calendar中的缓存
cal.setTime(date);
cal.add(Calendar.HOUR_OF_DAY, hour);// 3分钟之前的时间
return cal.getTime();
}
/**
* 获取指定日期,多少小时或者分钟的时间
* @param date
* @param type 类型:1=小时,2=分钟
* @param min 分钟:负数=之前的时间,正数=之后的时间
* @return
*/
public static Date getDateByHourOrMin(Date date,int type,int hourOrMin) {
Calendar cal = Calendar.getInstance();
cal.clear();//实例化Calendar之后,执行clear方法,清除Calendar中的缓存
cal.setTime(date);
if(type == 1) {
cal.add(Calendar.HOUR_OF_DAY, hourOrMin);// 3分钟之前的时间
}else if(type == 2) {
cal.add(Calendar.MINUTE, hourOrMin);// 3分钟之前的时间
}else {
throw new RuntimeException();
}
return cal.getTime();
}
/**
* 获得该年月第一天
* @param year
* @param month
* @return 返回如:2018-01-01
*/
public static String getFirstDayOfMonth(int year,int month){
Calendar cal = Calendar.getInstance();
cal.clear();//Calendar类当你set的时候,并不会立即生效,只有等你get的时候才会生效
//实例化Calendar之后,执行clear方法,清除Calendar中的缓存
cal.set(Calendar.YEAR,year); //设置年份
cal.set(Calendar.MONTH, month-1);//设置月份
int firstDay = cal.getActualMinimum(Calendar.DAY_OF_MONTH); //获取某月最小天数
cal.set(Calendar.DAY_OF_MONTH, firstDay);//设置日历中月份的最小天数
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //格式化日期
String firstDayOfMonth = sdf.format(cal.getTime());
return firstDayOfMonth;
}
/**
* 获得该月最后一天
* @param year
* @param month
* @return 返回如:2018-01-31
*/
public static String getLastDayOfMonth(int year,int month){
Calendar cal = Calendar.getInstance();
cal.clear();//Calendar类当你set的时候,并不会立即生效,只有等你get的时候才会生效
//实例化Calendar之后,执行clear方法,清除Calendar中的缓存
cal.set(Calendar.YEAR,year);//设置年份
cal.set(Calendar.MONTH, month-1); //设置月份
int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH); //获取某月最大天数
cal.set(Calendar.DAY_OF_MONTH, lastDay); //设置日历中月份的最大天数
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //格式化日期
String lastDayOfMonth = sdf.format(cal.getTime());
return lastDayOfMonth;
}
public static void main(String[] args) {
int run = 3;
System.out.println("当前执行:" + run);
if(run == 1) {
int length = 12;
for (int i = 0; i < length; i++) {
String forMsg = "[for:"+(i+1)+"/" +length + "]";
int year = 2019,month = i+1;
System.out.println(forMsg
+ "年:{" + year +"}"
+ ",月:{" + month + "}"
+ ",最大天数:" + getMaxDayOfMonth(year,month)
+ ",当前第一天:" + getFirstDayOfMonth(year,month)
+ ",当前最后一天:" + getLastDayOfMonth(year,month));
}
}else if(run == 2 ) {
System.out.println("获取指定日期,多少分钟的时间");
Date date = new Date();
String formateStr = "yyyy-MM-dd HH:mm:ss.SSS";
SimpleDateFormat df = new SimpleDateFormat(formateStr);
System.out.println("当前时间:" + df.format(date));
System.out.println("之前时间:"+ df.format(getDateByMin(date, -5)));
System.out.println("之后时间:"+ df.format(getDateByMin(date, 5)));
}else if(run == 3) {
System.out.println("获取指定日期,多少小时或者分钟的时间");
Date date = new Date();
String formateStr = "yyyy-MM-dd HH:mm:ss.SSS";
SimpleDateFormat df = new SimpleDateFormat(formateStr);
System.out.println("当前时间:" + df.format(date));
System.out.println("小时,之前:"+ df.format(getDateByHourOrMin(date,1,-1)));
System.out.println("小时,之后:"+ df.format(getDateByHourOrMin(date,1,1)));
System.out.println("分钟,之前:"+ df.format(getDateByHourOrMin(date,2,-10)));
System.out.println("分钟,之后:"+ df.format(getDateByHourOrMin(date,2,10)));
}
}