工具類(有關於時間的一些計算)

package com.pq.cheinfo.util;

import com.alibaba.fastjson.JSONObject;
import com.pq.framework.util.ImgCompress;
import com.pq.framework.util.StringUtil;
import org.apache.log4j.Logger;

import java.io.File;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

public class Utils {

	public final static Logger log = Logger.getLogger(Utils.class);

	private static final int FIRST_DAY_OF_WEEK = Calendar.THURSDAY;
	
	public static String getDate(String filename) {
		filename = StringUtil.nullToEmpty(filename, "_ -");
		if(filename.indexOf('_') != -1 && filename.indexOf('-') != -1) {
			return StringUtil.nullToEmpty(filename.substring(filename.indexOf('_') + 1, filename.indexOf('-')));
		}
		return "";
	}


	/**
	 * 得到當天開始時間
	 * @return
	 */
	public static String getBeginTime(){
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Calendar c = new GregorianCalendar();
		c.set(Calendar.HOUR_OF_DAY, 0);
		c.set(Calendar.MINUTE, 0);
		c.set(Calendar.SECOND, 0);
		return sdf.format(c.getTime());
	}

	/**
	 * 得到當天的結束時間
	 * @return
	 */
	public static String getEndTime(){
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Calendar c = new GregorianCalendar();
		c.set(Calendar.HOUR_OF_DAY, 23);
		c.set(Calendar.MINUTE, 59);
		c.set(Calendar.SECOND, 59);
		return sdf.format(c.getTime());
	}

	/**
	 * 計算兩個日期之間相差的天數
	 * @param smdate 較小的時間
	 * @param bdate 較大的時間
	 * @return 相差天數
	 * @throws ParseException
	 */
	public static Integer daysBetween(String smdate, String bdate)
	{
		try{
			SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
			Calendar cal = Calendar.getInstance();
			cal.setTime(sdf.parse(smdate));
			long time1 = cal.getTimeInMillis();
			cal.setTime(sdf.parse(bdate));
			long time2 = cal.getTimeInMillis();
			long between_days=(time2-time1)/(1000*3600*24);
			return Integer.parseInt(String.valueOf(between_days));
		}catch (Exception e){
			return 0;
		}

	}

	/**
	 *
	 * 1 第一季度 2 第二季度 3 第三季度 4 第四季度
	 *
	 * @param date
	 * @return
	 */
	public static  int getSeason(Date date) {
		int season = 0;
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		int month = c.get(Calendar.MONTH);
		switch (month) {
			case Calendar.JANUARY:
			case Calendar.FEBRUARY:
			case Calendar.MARCH:
				season = 1;
				break;
			case Calendar.APRIL:
			case Calendar.MAY:
			case Calendar.JUNE:
				season = 2;
				break;
			case Calendar.JULY:
			case Calendar.AUGUST:
			case Calendar.SEPTEMBER:
				season = 3;
				break;
			case Calendar.OCTOBER:
			case Calendar.NOVEMBER:
			case Calendar.DECEMBER:
				season = 4;
				break;
			default:
				break;
		}
		return season;
	}

	/**
	 * 獲取當前時間的前一天
	 */
	public static Calendar getNextDay() {
		Calendar calendar = Calendar.getInstance();
		calendar.add(Calendar.DAY_OF_MONTH, -1);
		return calendar;
	}

	/**
	 * 獲取當前時間的前一天 2019-03-01
	 */
	public static Calendar getNextDay(String date) throws ParseException {
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(simpleDateFormat.parse(date));
		calendar.add(Calendar.DAY_OF_MONTH, -1);
		return calendar;
	}

	/**
	 * 對字符串md5加密
	 *
	 * @param str
	 * @return
	 */
	public static String getMD5(String str) {
		try {
			// 生成一個MD5加密計算摘要
			MessageDigest md = MessageDigest.getInstance("MD5");
			// 計算md5函數
			md.update(str.getBytes());
			// digest()最後確定返回md5 hash值,返回值爲8爲字符串。因爲md5 hash值是16位的hex值,實際上就是8位的字符
			// BigInteger函數則將8位的字符串轉換成16位hex值,用字符串來表示;得到字符串形式的hash值
			return new BigInteger(1, md.digest()).toString(16);
		} catch (Exception e) {
			log.error(e.getMessage());
			return null;
		}
	}

	/**
	 * 獲取某段時間內的所有日期
	 * 根據開始時間,結束時間返回List日期段
	 */
	 public static List<Date> findDates(Date dateBegin, Date dateEnd)
	 {  
		  List rangeDate = new ArrayList();
		  rangeDate.add(dateBegin);  
		  Calendar calendarBegin = Calendar.getInstance();
		  calendarBegin.setTime(dateBegin);  
		  Calendar calEnd = Calendar.getInstance();
		  calEnd.setTime(dateEnd);  
		  while (dateEnd.after(calendarBegin.getTime()))  
		  {  
		   calendarBegin.add(Calendar.DAY_OF_MONTH, 1);
		   rangeDate.add(calendarBegin.getTime());  
		  }  
		  return rangeDate;  
	 }
	/**
	 * 獲取某段時間內的所有日期(開始結束都是字符串)格式: yyyy-MM-dd
	 * 根據開始時間,結束時間返回List日期段字符串類型
	 */
	public static List<String> getScopDate(String startDate, String endDate) {
		List<String> scop = new ArrayList<String>();
		try{
			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
			Date endDates = format.parse(endDate);
			Calendar startBegin = Calendar.getInstance();
			startBegin.setTime(format.parse(startDate));

			Calendar endBegin = Calendar.getInstance();
			endBegin.setTime(format.parse(endDate));


			scop.add(startDate);
			while (endDates.after(startBegin.getTime())) {
				startBegin.add(Calendar.DAY_OF_MONTH, 1);
				scop.add(format.format(startBegin.getTime()));
			}

		}catch (Exception e){
			log.error("method[getScopDate] error: " + e.getMessage());
		}
		return scop;
	}

	/**
	 * 獲取某個時間日期月份的一號
	 * 返回字符串類型的值,格式yyyy-MM-dd
	 */
	public static String getMonth(String date) throws ParseException {
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		Calendar cale = Calendar.getInstance();
		cale.setTime(format.parse(date));
		cale.add(Calendar.MONTH, 0);
		cale.set(Calendar.DAY_OF_MONTH, 1);
		return format.format(cale.getTime());
	}

    /**
	 * 獲取明天的日期
	 * 返回字符串類型值 格式yyyy-MM-dd
	 */
	public static String getNextDate(String date){
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

		Calendar calendar = Calendar.getInstance();
		try {
			calendar.setTime(dateFormat.parse(date));
			calendar.add(Calendar.DAY_OF_YEAR, 1);

			return dateFormat.format(calendar.getTime());
		} catch (ParseException e) {
			log.error("獲取明天日期時日期類型轉換異常" + e.getMessage());
		}

		return null;
	}

	/**
	 * 獲取指定的日期
	 * 返回字符串類型值 格式yyyy-MM-dd
	 */
	public static String getNextDate(String date, int days){
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

		Calendar calendar = Calendar.getInstance();
		try {
			calendar.setTime(dateFormat.parse(date));
			calendar.add(Calendar.DAY_OF_YEAR, days);

			return dateFormat.format(calendar.getTime());
		} catch (ParseException e) {
			log.error("獲取明天日期時日期類型轉換異常" + e.getMessage());
		}

		return null;
	}

	/**
	 * 獲取昨天的日期
	 * 返回字符串類型值 格式yyyy-MM-dd
	 */
	public static String getYesterdayDate(){
		Calendar calendar = Calendar.getInstance();
		calendar.add(Calendar.DAY_OF_YEAR, -1);
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		return dateFormat.format(calendar.getTime());
	}
	/**
	 * 獲取今天的日期
	 * 返回字符串類型值 格式yyyy-MM-dd
	 */
	public static String getTodayDate(){
		Calendar calendar = Calendar.getInstance();
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		return dateFormat.format(calendar.getTime());
	}

	/**
	 * 獲取週一
	 * 返回字符串類型值 格式yyyy-MM-dd
	 */
	public static String getWeekDate(String date) throws ParseException {
		//獲取周月
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//設置日期格式
		Calendar cld = Calendar.getInstance();
		cld.setTime(df.parse(date));
		//以週一爲首日
		cld.setFirstDayOfWeek(Calendar.MONDAY);
		//時間按周來設置,設置爲週一
		cld.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
		return df.format(cld.getTime());
	}


	/**
	 * 獲取週一
	 * 返回字符串類型值 格式yyyy-MM-dd
	 */
	public static String getMondayDate(String date)  {
		return getMondayDate(date, 0);
	}

	/**
	 * 獲取週一
	 * 返回字符串類型值 格式yyyy-MM-dd
	 */
	public static String getMondayDate(String date, int weekOffset)  {
		try{
			//獲取周月
			SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//設置日期格式
			Calendar cld = Calendar.getInstance();
			cld.setTime(df.parse(date));
			cld.add(Calendar.WEEK_OF_MONTH,weekOffset);
			//以週一爲首日
			cld.setFirstDayOfWeek(Calendar.MONDAY);
			//時間按周來設置,設置爲週一
			cld.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
			return df.format(cld.getTime());
		}catch (Exception e){
			log.error("method[getMondayDate] error: " + e.getMessage());
			return "";
		}

	}

	/**
	 * 獲取週日
	 * 返回字符串類型值 格式yyyy-MM-dd
	 */
	public static String getSundayDate(String date)  {
		return getSundayDate(date, 0);
	}

	/**
	 * 獲取週日
	 * 返回字符串類型值 格式yyyy-MM-dd
	 */
	public static String getSundayDate(String date, int weekOffset)  {
		try{
			//獲取周月
			SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//設置日期格式
			Calendar cld = Calendar.getInstance();
			cld.setTime(df.parse(date));
			cld.add(Calendar.WEEK_OF_MONTH,weekOffset);
			//以週一爲首日
			cld.setFirstDayOfWeek(Calendar.MONDAY);
			//時間按周來設置,設置爲週一
			cld.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
			return df.format(cld.getTime());
		}catch (Exception e){
			log.error("method[getSundayDate] error: " + e.getMessage());

			return "";
		}

	}

	public static String getLastWeekDate(String date, int weekOffset,int firstDayOfWeek, int searchDay)  {
		try{
			//獲取周月
			SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//設置日期格式
			Calendar cld = Calendar.getInstance();
			cld.setTime(df.parse(date));
			cld.add(Calendar.WEEK_OF_MONTH,weekOffset);
			//以週一爲首日
			cld.setFirstDayOfWeek(firstDayOfWeek);
			//時間按周來設置,設置爲週一
			cld.set(Calendar.DAY_OF_WEEK, searchDay);
			return df.format(cld.getTime());
		}catch (Exception e){
			log.error("method[getSundayDate] error: " + e.getMessage());

			return "";
		}

	}

	/**
	 * 獲取每個月的一號
	 * 返回字符串類型值 格式yyyy-MM-dd
	 */
	public static String getMonthDate(String date) {
		try{
			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
			Calendar cale = Calendar.getInstance();
			cale.setTime(format.parse(date));
			cale.add(Calendar.MONTH, 0);
			cale.set(Calendar.DAY_OF_MONTH, 1);
			return format.format(cale.getTime());
		}catch (Exception e){
			return null;
		}
	}

	/**
	 * 獲取每個月的最後一天
	 * @param date
	 * @return
	 * @throws ParseException
	 */
	public static String getDateLastDay(String date) throws ParseException {
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		Calendar cale = Calendar.getInstance();
		cale.setTime(format.parse(date));
		cale.add(Calendar.MONTH, 1);
		cale.set(Calendar.DAY_OF_MONTH, 0);
		return format.format(cale.getTime());
	}

	/***
	 * 獲得取每個月的最後一天日期
	 * 返回字符串類型值 格式yyyy-MM-dd
	 * @param date
	 * @return
	 */
	public static String lastDayOfMonth(String date) {
		try{
			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
			Calendar cale = Calendar.getInstance();
			cale.setTime(format.parse(date));
			cale.set(Calendar.DAY_OF_MONTH, 1);
			cale.roll(Calendar.DAY_OF_MONTH, -1);
			return format.format(cale.getTime());
		}catch (Exception e){
			return date;
		}

	}

	/***
	 * 獲得兩個月份日期之間的所有月份日期
	 * 包含前後兩個月份
	 * @param start_month
	 * @param end_month
	 * @return
	 */
	public static List<String> monthBetween(String start_month, String end_month){
		List<String> result = new ArrayList<>();

		if(start_month.compareTo(end_month) > 0){
			return result;
		}else{
			int s_year = Integer.parseInt(start_month.substring(0,4));
			int s_month = Integer.parseInt(start_month.substring(5,7));
			int e_year = Integer.parseInt(end_month.substring(0,4));
			int e_month = Integer.parseInt(end_month.substring(5,7));

			for(int i=s_year; i<=e_year; i++){

				int t_month = 1;
				int t_e_month = 12;
				if(i==s_year){
					t_month=s_month;
				}
				if(i==e_year){
					t_e_month=e_month;
				}
				for(int j = t_month; j<=t_e_month; j++){
					String t_str = i+"-"+String.format("%02d", j);
					result.add(t_str);
				}
			}
		}

		return result;
	}

	public static List<String> weekBetween(String start_week, String end_week){
		List<String> result = new ArrayList<>();

		if(start_week.compareTo(end_week) > 0){
			return result;
		}else{
			int s_year = Integer.parseInt(start_week.substring(0,4));
			int s_week = Integer.parseInt(start_week.substring(5,7));
			int e_year = Integer.parseInt(end_week.substring(0,4));
			int e_week = Integer.parseInt(end_week.substring(5,7));

			for(int i=s_year; i<=e_year; i++){

				int t_month = 1;
				int t_e_month = getWeekNumOfYear(i+"");
				if(i==s_year){
					t_month=s_week;
				}
				if(i==e_year){
					t_e_month=e_week;
				}
				for(int j = t_month; j<=t_e_month; j++){
					String t_str = i+"-"+String.format("%02d", j);
					result.add(t_str);
				}
			}
		}

		return result;
	}

	/***
	 * 獲得下一個月份字符串
	 * @param month_str yyyy-mm格式
	 * @return
	 */
	public static String getNextMonth(String month_str){

		int year = Integer.parseInt(month_str.substring(0,4));
		int month = Integer.parseInt(month_str.substring(5,7));
		if(month == 12){
			return (year+1)+"-01";
		}else{
			return year+"-"+String.format("%02d", month+1);

		}
	}

	/***
	 * 獲得下一個月份字符串
	 * @param month_str yyyy-mm格式
	 * @return
	 */
	public static String getPreMonth(String month_str){

		int year = Integer.parseInt(month_str.substring(0,4));
		int month = Integer.parseInt(month_str.substring(5,7));
		if(month == 1){
			return (year-1)+"-12";
		}else{
			return year+"-"+String.format("%02d", month-1);

		}
	}

	/***
	 * 獲得某日期是當年度的第幾周
	 * @param date_str
	 * @return
	 */
	public static String getYearOfWeekStr(String date_str){
		return getYearOfWeekStr(date_str, 0);

	}

	public static String getYearOfWeekStr(String date_str, int weekOffset){
		return getYearOfWeekStr(date_str, weekOffset, Calendar.MONDAY);
	}

	public static String getYearOfWeekStr(String date_str, int weekOffset, int FirstDayofWeek){
		int week = 0 ;
		int year = 0;
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		SimpleDateFormat formaty = new SimpleDateFormat("YYYY");
		try {
			Date date = null;
			date = format.parse(date_str);

			Calendar calendar = Calendar.getInstance();
			calendar.setFirstDayOfWeek(FirstDayofWeek);
			calendar.setTime(date);
			calendar.add(Calendar.WEEK_OF_MONTH,weekOffset);
			week = calendar.get(Calendar.WEEK_OF_YEAR);
			year = Integer.parseInt(formaty.format(calendar.getTime()));

		}catch (Exception e){
			log.error("method[getYearOfWeekStr] error: " + e.getMessage());
		}

		String week_str = year+"-"+String.format("%02d", week);
		return week_str;

	}

	public static String getWeekOfYear(String dateStr) {
		int week = 0;
		int year = 0;
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		try {
			// 獲取指定周的第一天
			Calendar calendar = Calendar.getInstance();
			calendar.setTime(format.parse(dateStr));
			//以週一爲首日
			calendar.setFirstDayOfWeek(Calendar.MONDAY);
			//週四的那一天爲所在周的第一天
			calendar.set(Calendar.DAY_OF_WEEK, FIRST_DAY_OF_WEEK);

			week = calendar.get(Calendar.WEEK_OF_YEAR);
			year = calendar.get(Calendar.YEAR);

		}catch (Exception e){
			log.error("method[getWeekOfYear] error: " + e.getMessage() + ", params: dateStr: " + dateStr);
		}

		String week_str = year+"-"+String.format("%02d", week);
		return week_str;
	}

	/***
	 * 獲得一年一共有多少周
	 * 判斷當年最後一天的週數
	 * @param year
	 * @return
	 */
	public static int getWeekNumOfYear(String year){
		String week_str = getYearOfWeekStr(year+"-12-31");

		int week_num =Integer.parseInt(week_str.substring(5,7));
		if(week_num == 1){
			week_str = getYearOfWeekStr(year+"-12-24");
			week_num =Integer.parseInt(week_str.substring(5,7));
		}

		return week_num;
	}


	public static String formatMonthStr(String date_str){
		String[] arrs = date_str.split("-");
		int year = Integer.parseInt(arrs[0]);
		int month = Integer.parseInt(arrs[1]);
		String month_str = year+"-"+String.format("%02d", month);
		return month_str;
	}


	public static String cancatFileName(String filePath){
		File tempFile =new File( filePath.trim());
		return tempFile.getName();
	}

	public static String getPreDate(String date_str){
		try{
			SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
			Calendar calendar = Calendar.getInstance();
			calendar.setTime(simpleDateFormat.parse(date_str));
			calendar.add(Calendar.DAY_OF_MONTH, -1);
			return simpleDateFormat.format(calendar.getTime());
		}catch (Exception e){
			log.error("method[getPreDate] error: " + e.getMessage());

			return date_str;
		}
	}

	public static HashMap<String, List<String>> splitMonthRange(String start_date, String end_date){
		HashMap<String, List<String>> result = new HashMap<>();
		result.put("before", new ArrayList<>());
		result.put("month", new ArrayList<>());
		result.put("after", new ArrayList<>());
		int day_lengh = daysBetween(start_date, end_date);
		if(day_lengh<27){
			// 日期超過28天才找整個月份的日期段
			// 肯定不夠一個月,直接返回
			result.get("before").add(start_date);
			result.get("before").add(end_date);
		}else{
			// 獲得開始日期的月份,第一天,最後一天,月份
			String s_month = start_date.substring(0, 7);
			String s_first_day = start_date.substring(0, 7)+"-01";
			String s_end_day = lastDayOfMonth(start_date);
			if(!(end_date.compareTo(s_end_day) >=0
					&& start_date.compareTo(s_first_day)<=0)){
				s_month = getNextMonth(s_month);
			}

			// 獲得結束日期的月份,第一天,最後一天,月份
			String e_month = end_date.substring(0, 7);
			String e_first_day = end_date.substring(0, 7)+"-01";
			String e_end_day = lastDayOfMonth(end_date);
			if(!(end_date.compareTo(e_end_day) >=0
					&& start_date.compareTo(e_first_day)<=0)){
				e_month = getPreMonth(e_month);
				e_end_day = lastDayOfMonth(e_month+"-01");
			}
			// 獲得中間的月份數
			List<String> month_list = monthBetween(s_month, e_month);
			if(month_list.size() >0 ){
				result.put("month", month_list);
				if(start_date.compareTo(s_month+"-01") < 0){
					result.get("before").add(start_date);
					result.get("before").add(getPreDate(s_month+"-01"));
				}
				if(end_date.compareTo(e_end_day) > 0){
					result.get("after").add(getNextDate(e_end_day));
					result.get("after").add(end_date);
				}
			}else{
				// 沒有整月直接返回
				result.get("before").add(start_date);
				result.get("before").add(end_date);
			}
		}

		return result;
	}

	public static HashMap<String, List<String>> splitWeekRange(String start_date, String end_date){
		HashMap<String, List<String>> result = new HashMap<>();
		result.put("before", new ArrayList<>());
		result.put("week", new ArrayList<>());
		result.put("after", new ArrayList<>());
		int day_lengh = daysBetween(start_date, end_date);
		if(day_lengh<6){
			// 日期超過7天才找整個周的日期段
			result.get("before").add(start_date);
			result.get("before").add(end_date);
		}else{
			// 獲得開始日期的週數,週一,週日,週數
			String s_week = getYearOfWeekStr(start_date);
			String s_monday = getMondayDate(start_date);
			String s_sunday = getSundayDate(start_date);
			if(!(end_date.compareTo(s_sunday) >=0
					&& start_date.compareTo(s_monday)<=0)){
				s_week = getYearOfWeekStr(start_date, 1);
				s_monday = getMondayDate(start_date, 1);
				s_sunday = getSundayDate(start_date, 1);
			}
			// 獲得結束日期的週數,第一天,最後一天,週數
			String e_week = getYearOfWeekStr(end_date);
			String e_monday = getMondayDate(end_date);
			String e_sunday = getSundayDate(end_date);
			if(!(end_date.compareTo(e_sunday) >=0
					&& start_date.compareTo(e_monday)<=0)){
				e_week = getYearOfWeekStr(end_date, -1);
				e_monday = getMondayDate(end_date, -1);
				e_sunday = getSundayDate(end_date, -1);
			}
			// 計算週數
			List<String> week_list = weekBetween(s_week, e_week);
			if(week_list.size() >0 ){
				result.put("week", week_list);
				if(start_date.compareTo(s_monday) < 0){
					result.get("before").add(start_date);
					result.get("before").add(getPreDate(s_monday));
				}
				if(end_date.compareTo(e_sunday) > 0){
					result.get("after").add(getNextDate(e_sunday));
					result.get("after").add(end_date);
				}
			}else{
				// 沒有整月直接返回
				result.get("before").add(start_date);
				result.get("before").add(end_date);
			}
		}

		return result;
	}

    /***
     * 將一個時間段,轉爲爲日,周,月列表
     * @param start_date
     * @param end_date
     * @return
     */
    public static HashMap<String, List<String>> splitDateRange(String start_date, String end_date){
        HashMap<String, List<String>> result = new HashMap<>();
        result.put("day", new ArrayList<>());
        result.put("week", new ArrayList<>());
        result.put("month", new ArrayList<>());

        // 1. 找整月的 日期段
        HashMap<String, List<String>> month_hits = splitMonthRange(start_date, end_date);
        result.get("month").addAll(month_hits.get("month"));

        // 2. 找整週的 日期段
        if(month_hits.get("before").size()>0){
            HashMap<String, List<String>> week_hits_1 = splitWeekRange(month_hits.get("before").get(0),
                    month_hits.get("before").get(1));
            result.get("week").addAll(week_hits_1.get("week"));

            // 3. 剩下的是單天的日期
            if(week_hits_1.get("before").size()>0){
                result.get("day").addAll(getScopDate(week_hits_1.get("before").get(0),
                        week_hits_1.get("before").get(1)));
            }
            if(week_hits_1.get("after").size()>0){
                result.get("day").addAll(getScopDate(week_hits_1.get("after").get(0),
                        week_hits_1.get("after").get(1)));
            }
        }

        if(month_hits.get("after").size()>0){
            HashMap<String, List<String>> week_hits_2 = splitWeekRange(month_hits.get("after").get(0),
                    month_hits.get("after").get(1));
            result.get("week").addAll(week_hits_2.get("week"));

            if(week_hits_2.get("before").size()>0){
                result.get("day").addAll(getScopDate(week_hits_2.get("before").get(0),
                        week_hits_2.get("before").get(1)));
            }
            if(week_hits_2.get("after").size()>0){
                result.get("day").addAll(getScopDate(week_hits_2.get("after").get(0),
                        week_hits_2.get("after").get(1)));
            }
        }
        // 4. 拼接結果
        return result;
    }

	public static HashMap<String, List<String>> splitDateRangeOnlyMonth(String start_date, String end_date){
		HashMap<String, List<String>> result = new HashMap<>();
		result.put("day", new ArrayList<>());
		result.put("month", new ArrayList<>());

		// 1. 找整月的 日期段
		HashMap<String, List<String>> month_hits = splitMonthRange(start_date, end_date);
		result.get("month").addAll(month_hits.get("month"));

		// 2. 找整週的 日期段
		if(month_hits.get("before").size()>0){
			result.get("day").addAll(getScopDate(month_hits.get("before").get(0),
					month_hits.get("before").get(1)));
		}

		if(month_hits.get("after").size()>0){
			result.get("day").addAll(getScopDate(month_hits.get("after").get(0),
					month_hits.get("after").get(1)));
		}
		// 4. 拼接結果
		return result;
	}

//	public static void main(String[] argvs){
//    	System.out.println(getYearOfWeekStr("2020-05-14",-1,Calendar.FRIDAY));
//    	System.out.println(getYearOfWeekStr("2020-05-15",-1,Calendar.FRIDAY));
//		System.out.println(getYearOfWeekStr("2020-01-01",-1,Calendar.FRIDAY));
//		System.out.println(getYearOfWeekStr("2019-12-31",-1,Calendar.FRIDAY));
//	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章