Calendar根据输入时间查询月初、月末日期(两种方法)

经常用到查询月初月末方法,平时都是在网上copy,今天把平时copy的方法总结一下

第一种方法: 

import java.util.Calendar;
import java.text.SimpleDateFormat;
public static void main(String[] args) {
		String selectDate = "2018-08-09";
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Calendar cal = Calendar.getInstance();
		if (StringUtils.isNotEmpty(selectDate)) {// 输入日期不为空,set到cal中
			try {
				cal.setTime(sdf.parse(selectDate));
			} catch (ParseException e) {
				e.printStackTrace();
			}
		} else {// 输入日期为空,去当前日期
			cal.setTime(new Date());
		}
		
		String start = "";// 月初日期
		String end = "";// 月末日期
		cal.set(Calendar.DAY_OF_MONTH, 1);// 取设置的cal的当月第一天
		start = sdf.format(cal.getTime());
		cal.add(Calendar.MONTH, 1);// 取设置的cal的下月对应日期,上面已经将cal日期设置成当月第一天,所以这里取到的是下月月初日期,若cal之前设置的2018-01-31,这里会取到2018-02-28,也就是说下个月的天数不足时,就只能取到下个月的月末,若cal之前设置的2018-02-28,这里会取到2018-03-28,下个月的天数足够多时,就正常取下个月对应日期
		cal.set(Calendar.DAY_OF_MONTH, 0);// 取设置的cal的上月最后一天
		end = sdf.format(cal.getTime());
		System.out.println("start:"+ start);// 输出月初日期 2018-08-01
		System.out.println("end:"+ end);// 输出月末日期 2018-08-31
}

第二种方法 : 

public static void main(String[] args) {
		String selectDate = "2018-08-09";
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Calendar cal = Calendar.getInstance();
		if (StringUtils.isNotEmpty(selectDate)) {
			try {
				cal.setTime(sdf.parse(selectDate));
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} else {
			cal.setTime(new Date());
		}
		
		String start = "";
		String end = "";
		System.out.println("actualMinimum:"+ cal.getActualMinimum(Calendar.DAY_OF_MONTH));// 当月最小天数 输出为1
		cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));// 设置cal为当月最小日期
		start = sdf.format(cal.getTime());
		
		System.out.println("actualMaximum:"+ cal.getActualMaximum(Calendar.DAY_OF_MONTH));// 当月最大天数 输出为31
		cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));// 设置cal为当月最大日期
		end = sdf.format(cal.getTime());
		
		System.out.println("start:"+ start);// 输出月初日期 2018-08-01
		System.out.println("end:"+ end);// 输出月末日期 2018-08-31
}

猜你喜欢

转载自blog.csdn.net/krokory/article/details/81540857