package com;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class DateUtils {

	public static final String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
	public static final String MINUTE_PATTERN = "yyyy-MM-dd HH:mm";
	public static final String HOUR_PATTERN = "yyyy-MM-dd HH:mm:ss";
	public static final String DATE_PATTERN = "yyyy-MM-dd";
	public static final String HOUR_FORMAT = "HH:mm:ss";
	public static final String MONTH_PATTERN = "yyyy-MM";
	public static final String YEAR_PATTERN = "yyyy";
	public static final String MINUTE_ONLY_PATTERN = "mm";
	public static final String HOUR_ONLY_PATTERN = "HH";

	private DateUtils() {
	}

	/**
	 * 时间格式化成字符串(pattern为空时,返回yyyy-MM-dd型字符串)
	 * 
	 * @param date
	 *            Date
	 * @param pattern
	 *            StrUtils.DATE_TIME_PATTERN || StrUtils.DATE_PATTERN,
	 *            如果为空,则为yyyy-MM-dd
	 * @return
	 * @throws ParseException
	 */
	public static String dateFormat(Date date, String pattern) throws ParseException {
		if (pattern == null || pattern == "") {
			pattern = DateUtils.DATE_PATTERN;
		}
		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		return sdf.format(date);
	}

	/**
	 * 字符串解析成时间对象
	 * 
	 * @param dateTimeString
	 *            String
	 * @param pattern
	 *            StrUtils.DATE_TIME_PATTERN ||
	 *            StrUtils.DATE_PATTERN,如果为空,则为yyyy-MM-dd
	 * @return
	 * @throws ParseException
	 */
	public static Date dateParse(String dateTimeString, String pattern) throws ParseException {
		if (pattern == null || pattern == "") {
			pattern = DateUtils.DATE_PATTERN;
		}
		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		// System.out.println(dateFormat(dateParse("2017-07-06 21:05:26",
		// "yyyy-MM-dd"),"yyyy-MM-dd")); //2017-07-06
		// System.out.println(dateFormat(dateParse("2017-07-06 21:05:26",
		// "yyyy-MM-dd"),"yyyy-MM-dd HH:mm:ss")); //2017-07-06 00:00:00
		// System.out.println(dateFormat(dateParse("2017-07-06 21:05:26",
		// "yyyy-MM-dd HH:mm:ss"),"yyyy-MM-dd")); //2017-07-06
		// System.out.println(dateFormat(dateParse("2017-07-06 21:05:26",
		// "yyyy-MM-dd HH:mm:ss"),"yyyy-MM-dd HH:mm:ss")); //2017-07-06 21:05:26
		return sdf.parse(dateTimeString);
	}

	/**
	 * 将日期时间格式成只有日期的字符串(可以直接使用dateFormat,Pattern为Null进行格式化) // 即
	 * "yyyy-MM-dd HH:mm:ss" --->>> "yyyy-MM-dd"
	 * 
	 * @param dateTime
	 *            Date
	 * @return
	 * @throws ParseException
	 */
	public static String dateTimeToDateString(Date dateTime) throws ParseException {
		String dateTimeString = DateUtils.dateFormat(dateTime, DateUtils.DATE_TIME_PATTERN);
		return dateTimeString.substring(0, 10);
	}

	/**
	 * 当时、分、秒为00:00:00时,将日期时间格式成只有日期(yyyy-MM-dd)的字符串, //整理"yyyy-MM-dd HH:mm:ss"
	 * 和"yyyy-MM-dd"两种格式的混和数据,以yyyy-MM-dd格式字符串输出 当时、分、秒不为00:00:00时,直接返回
	 * 
	 * @param dateTime
	 *            Date
	 * @return
	 * @throws ParseException
	 */
	public static String dateTimeToDateStringIfTimeEndZero(Date dateTime) throws ParseException {
		String dateTimeString = DateUtils.dateFormat(dateTime, DateUtils.DATE_TIME_PATTERN);
		if (dateTimeString.endsWith("00:00:00")) {
			return dateTimeString.substring(0, 10);
		} else {
			return dateTimeString;
		}
	}

	/**
	 * 用途:获得 Date的时、分、秒 2017年8月5日 下午12:21:34 张进 return String
	 */
	public static String getHHmmssTime(Date date) {
		SimpleDateFormat sdf_hour_format = new SimpleDateFormat(DateUtils.HOUR_FORMAT);
		Calendar cale = Calendar.getInstance();
		cale.setTime(date);
		String temp = "";
		try {
			temp += sdf_hour_format.format(cale.getTime());
			return temp;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return temp;
	}

	/**
	 * 将日期时间格式成日期对象,和dateParse互用 //时、分、秒、归零
	 * 
	 * @param dateTime
	 *            Date
	 * @return Date
	 * @throws ParseException
	 */
	public static Date dateTimeToDate(Date dateTime) throws ParseException {
		Calendar cal = Calendar.getInstance();
		cal.setTime(dateTime);
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MILLISECOND, 0);
		return cal.getTime();
	}

	/**
	 * 时间加减小时
	 * 
	 * @param startDate
	 *            要处理的时间,Null则为当前时间
	 * @param hours
	 *            加减的小时
	 * @return Date
	 */
	public static Date dateAddHours(Date startDate, int hours) {
		if (startDate == null) {
			startDate = new Date();
		}
		Calendar c = Calendar.getInstance();
		c.setTime(startDate);
		c.set(Calendar.HOUR, c.get(Calendar.HOUR) + hours);
		// System.out.println("2017-08-05 10:46:58--->>结果:
		// "+dateFormat(dateAddHours(new Date() , 20), "yyyy-MM-dd HH:mm:ss"));
		// // -->>>2017-08-06 06:46:58
		return c.getTime();
	}

	/**
	 * 时间加减分钟
	 * 
	 * @param startDate
	 *            要处理的时间,Null则为当前时间
	 * @param minutes
	 *            加减的分钟
	 * @return
	 */
	public static Date dateAddMinutes(Date startDate, int minutes) {
		if (startDate == null) {
			startDate = new Date();
		}
		Calendar c = Calendar.getInstance();
		c.setTime(startDate);
		c.set(Calendar.MINUTE, c.get(Calendar.MINUTE) + minutes);
		return c.getTime();
	}

	/**
	 * 时间加减秒数
	 * 
	 * @param startDate
	 *            要处理的时间,Null则为当前时间
	 * @param minutes
	 *            加减的秒数
	 * @return
	 */
	public static Date dateAddSeconds(Date startDate, int seconds) {
		if (startDate == null) {
			startDate = new Date();
		}
		Calendar c = Calendar.getInstance();
		c.setTime(startDate);
		c.set(Calendar.SECOND, c.get(Calendar.SECOND) + seconds);
		return c.getTime();
	}

	/**
	 * 日期相加减天数
	 * 
	 * @param date
	 *            如果为Null,则为当前时间
	 * @param days
	 *            加减天数
	 * @param ---->>
	 *            includeTime 是否包括时分秒,true表示包含
	 * @return
	 * @throws ParseException
	 */
	public static Date dateAddDays(Date date, int days) throws ParseException {
		if (date == null) {
			date = new Date();
		}
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.DATE, days);

		// 2017-08-04
		// System.out.println("true: "+dateFormat(dateAdd(new Date(), 2, true),
		// "yyyy-MM-dd HH:mm:ss")); --->>true 2017-08-06 21:27:04
		// System.out.println("false: "+dateFormat(dateAdd(new Date(), -2,
		// false), "yyyy-MM-dd HH:mm:ss")); --->>false 2017-08-02 00:00:00
		return cal.getTime();
	}

	/**
	 * 时间加减月数
	 * 
	 * @param startDate
	 *            要处理的时间,Null则为当前时间
	 * @param months
	 *            加减的月数
	 * @return Date
	 */
	public static Date dateAddMonths(Date startDate, int months) {
		if (startDate == null) {
			startDate = new Date();
		}
		Calendar c = Calendar.getInstance();
		c.setTime(startDate);
		c.set(Calendar.MONTH, c.get(Calendar.MONTH) + months);
		return c.getTime();
	}

	/**
	 * 时间加减年数
	 * 
	 * @param startDate
	 *            要处理的时间,Null则为当前时间
	 * @param years
	 *            加减的年数
	 * @return Date
	 */
	public static Date dateAddYears(Date startDate, int years) {
		if (startDate == null) {
			startDate = new Date();
		}
		Calendar c = Calendar.getInstance();
		c.setTime(startDate);
		c.set(Calendar.YEAR, c.get(Calendar.YEAR) + years);
		return c.getTime();
	}

	/**
	 * 时间比较(如果myDate>compareDate返回1,<返回-1,相等返回0)
	 * 
	 * @param myDate
	 *            时间
	 * @param compareDate
	 *            要比较的时间
	 * @return int
	 */
	public static int dateCompare(Date myDate, Date compareDate) {
		Calendar myCal = Calendar.getInstance();
		Calendar compareCal = Calendar.getInstance();
		myCal.setTime(myDate);
		compareCal.setTime(compareDate);
		return myCal.compareTo(compareCal);
	}

	/**
	 * 用途:比较两个日期相差的天数 2017年8月5日 下午1:22:33 张进 return int
	 */
	public static int getDayMargin(Date date1, Date date2) {
		int days = (int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24));
		// System.out.println(getDayMargin(dateParse("2017-08-07 14:00:00",
		// "yyyy-MM-dd HH:mm:ss"),dateParse("2018-08-08 14:00:00", "yyyy-MM-dd
		// HH:mm:ss"))); //366
		// System.out.println(getDayMargin(dateParse("2017-08-07 10:00:00",
		// "yyyy-MM-dd HH:mm:ss"),dateParse("2018-08-08 14:00:00", "yyyy-MM-dd
		// HH:mm:ss"))); //366
		// System.out.println(getDayMargin(dateParse("2017-08-08 00:00:00",
		// "yyyy-MM-dd HH:mm:ss"),dateParse("2018-08-08 20:00:00", "yyyy-MM-dd
		// HH:mm:ss"))); //365
		return days;
	}

	/**
	 * 比较两个日期相差的月数
	 * 
	 * @return int
	 */
	public static int getMonthMargin(String date1, String date2) {
		int margin = 0;
		try {
			margin = (Integer.parseInt(date2.substring(0, 4))
					- Integer.parseInt(date1.substring(0, 4))) * 12;
			margin += (Integer.parseInt(date2.substring(4, 7).replaceAll("-0", "-"))
					- Integer.parseInt(date1.substring(4, 7).replaceAll("-0", "-")));
			return margin;
		} catch (Exception e) {
			e.printStackTrace();
		}
		// System.out.println(getMonthMargin("2016-06-02 15:45:00","2017-07-01
		// 00:25:35")); --->>11
		// System.out.println(getMonthMargin("2016-07-28","2017-07-01
		// 00:25:35")); --->>12
		// System.out.println(getMonthMargin("2016-08-02","2017-07-01 "));
		// --->>13
		return margin;
	}

	/**
	 * 获取两个时间中最小的一个时间
	 * 
	 * @param date
	 * @param compareDate
	 * @return
	 */
	public static Date dateMin(Date date, Date compareDate) {
		if (date == null) {
			return compareDate;
		}
		if (compareDate == null) {
			return date;
		}
		if (1 == dateCompare(date, compareDate)) {
			return compareDate;
		} else if (-1 == dateCompare(date, compareDate)) {
			return date;
		}
		return date;
	}

	/**
	 * 获取两个时间中最大的一个时间
	 * 
	 * @param date
	 * @param compareDate
	 * @return
	 */
	public static Date dateMax(Date date, Date compareDate) {
		if (date == null) {
			return compareDate;
		}
		if (compareDate == null) {
			return date;
		}
		if (1 == dateCompare(date, compareDate)) {
			return date;
		} else if (-1 == dateCompare(date, compareDate)) {
			return compareDate;
		}
		return date;
	}

	/**
	 * 获取两个日期(不含时分秒)相差的天数,不包含今天
	 * 
	 * @param startDate
	 * @param endDate
	 * @return
	 * @throws ParseException
	 */
	public static int dateBetween(Date startDate, Date endDate) throws ParseException {
		Date dateStart = dateParse(dateFormat(startDate, DATE_PATTERN), DATE_PATTERN);
		Date dateEnd = dateParse(dateFormat(endDate, DATE_PATTERN), DATE_PATTERN);
		return (int) ((dateEnd.getTime() - dateStart.getTime()) / 1000 / 60 / 60 / 24);
	}

	/**
	 * 获取两个日期(不含时分秒)相差的天数,包含今天
	 * 
	 * @param startDate
	 * @param endDate
	 * @return
	 * @throws ParseException
	 */
	public static int dateBetweenIncludeToday(Date startDate, Date endDate) throws ParseException {
		return dateBetween(startDate, endDate) + 1;
	}

	/**
	 * 获取日期时间的年份,如2017-02-13,返回2017
	 * 
	 * @param date
	 * @return
	 */
	public static int getYear(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		return cal.get(Calendar.YEAR);
	}

	/**
	 * 获取日期时间的月份,如2017年2月13日,返回2
	 * 
	 * @param date
	 * @return
	 */
	public static int getMonth(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		return cal.get(Calendar.MONTH) + 1;
	}

	/**
	 * 获取日期时间的第几天(即返回日期的dd),如2017-02-13,返回13
	 * 
	 * @param date
	 * @return
	 */
	public static int getDate(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		return cal.get(Calendar.DATE);
	}

	/**
	 * 获取日期时间当月的总天数,如2017-02-13,返回28
	 * 
	 * @param date
	 * @return
	 */
	public static int getDaysOfMonth(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		return cal.getActualMaximum(Calendar.DATE);
	}

	/**
	 * 获取日期时间当年的总天数,如2017-02-13,返回2017年的总天数
	 * 
	 * @param date
	 * @return
	 */
	public static int getDaysOfYear(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		return cal.getActualMaximum(Calendar.DAY_OF_YEAR);
	}

	/**
	 * 根据时间获取当月最大的日期
	 * <li>2017-02-13,返回2017-02-28</li>
	 * <li>2016-02-13,返回2016-02-29</li>
	 * <li>2016-01-11,返回2016-01-31</li>
	 * 
	 * @param date
	 *            Date
	 * @return
	 * @throws Exception
	 */
	public static Date maxDateOfMonth(Date date) throws Exception {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		int value = cal.getActualMaximum(Calendar.DATE);
		return dateParse(dateFormat(date, MONTH_PATTERN) + "-" + value, null);
	}

	/**
	 * 根据时间获取当月最小的日期,也就是返回当月的1号日期对象
	 * 
	 * @param date
	 *            Date
	 * @return
	 * @throws Exception
	 */
	public static Date minDateOfMonth(Date date) throws Exception {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		int value = cal.getActualMinimum(Calendar.DATE);
		return dateParse(dateFormat(date, MONTH_PATTERN) + "-" + value, null);
	}

	/**
	 * 是否符合日期格式yyyy-MM-dd
	 * 
	 * @param 日期字符串
	 * @return boolean
	 */
	public static boolean isFormatDay(String day) {
		// System.out.println(isFormatDay("2017-8-05")); // --->>>false
		// System.out.println(isFormatDay("2017-08-05")); // --->>true
		return day.matches(
				"(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)");
	}

	/**
	 * 是否符合时间格式HH:mm:ss
	 * 
	 * @param time
	 *            字符串
	 * @return boolean
	 */
	public static boolean isFormatTime(String time) {
		return time.matches(
				"(0[1-9]|1[0-9]|2[0-4]):(0[1-9]|[1-5][0-9]):(0[1-9]|[1-5][0-9])(\\.000000)?");
	}

	/**
	 * 是否符合时间格式yyyy-MM-dd HH:mm:ss
	 * 
	 * @param date+time
	 *            字符串
	 * @return boolean
	 */
	public static boolean isFormat(String time) {
		String[] temp = time.split(" ");
		return isFormatDay(temp[0]) && isFormatTime(temp[1]);
	}

	/**
	 * 获得当前日期是星期几
	 * 
	 * @return int
	 */
	public static int getCurNumOFWeek(String dat, String pattern) {
		SimpleDateFormat format = new SimpleDateFormat(pattern);
		Date date = null;
		try {
			date = format.parse(dat);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		Calendar calendar = Calendar.getInstance();
		calendar.setFirstDayOfWeek(Calendar.MONDAY);
		calendar.setTime(date);
		// System.out.println(getCurNumOFWeek("2017-08-08 23:05:25", "yyyy-MM-dd
		// HH:mm:ss"));
		return calendar.get(Calendar.DAY_OF_WEEK);
	}

	/**
	 * 得到输入日期所在的周一
	 * 
	 * @return String
	 */
	public static String getMondayOfThisWeek(Date date, String pattern) {
		SimpleDateFormat format = new SimpleDateFormat(pattern);
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		int day_of_week = c.get(Calendar.DAY_OF_WEEK) - 1;
		if (day_of_week == 0)
			day_of_week = 7;
		c.add(Calendar.DATE, -day_of_week + 1);
		return format.format(c.getTime());
	}

	/**
	 * 得到输入日期所在的周日
	 * 
	 * @return String
	 */
	public static String getSundayOfThisWeek(Date date, String pattern) {
		SimpleDateFormat format = new SimpleDateFormat(pattern);
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		int day_of_week = c.get(Calendar.DAY_OF_WEEK) - 1;
		if (day_of_week == 0)
			day_of_week = 7;
		c.add(Calendar.DATE, -day_of_week + 7);
		return format.format(c.getTime());
	}

	/**
	 * 获得当前日期的年份
	 * 
	 * @return int
	 */
	public static int getCurrentYearNum(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar.get(Calendar.YEAR);
	}

	/**
	 * 获得当前的月份那一年的第几月
	 * 
	 * @return
	 */
	public static int getCurrentMonthNum(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar.get(Calendar.MONTH) + 1;
	}

	/**
	 * 获得当前的日期那一年的第几周
	 * 
	 * @return
	 */
	public static int getweekNumOfTheYear(Date date) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		return c.get(Calendar.WEEK_OF_YEAR);
	}

	/**
	 * 获得当前日期是那一年的第几天
	 * 
	 * @return
	 */
	public static int getNumOfTheYear(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		return cal.get(Calendar.DAY_OF_YEAR);
	}

	/**
	 * 获得当前日期是本月的第几天
	 * 
	 * @return 当前日
	 */
	public static int getCurrentDay() {
		return Calendar.getInstance().get(Calendar.DATE);
	}

	/**
	 * 获得当前日期是本月的第几周
	 * 
	 * @return int
	 */
	public static int getCurWeekNumOfMonth(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setFirstDayOfWeek(Calendar.MONDAY);
		calendar.setTime(date);
		// System.out.println(getCurWeekNumOfMonth(DateUtils.dateParse("2017-08-08",
		// "yyyy-MM-dd")));
		return calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH);
	}

	/**
	 * 获取当年的第一天
	 * 
	 * @param year
	 * @return
	 */
	public static Date getFirstOfYear(Date date) {
		Calendar currCal = Calendar.getInstance();
		currCal.setTime(date);
		int currentYear = currCal.get(Calendar.YEAR);
		return getFirstOfYear(currentYear);
	}

	/**
	 * 获取某年第一天日期
	 * 
	 * @param year
	 *            年份
	 * @return Date
	 */
	public static Date getFirstOfYear(int year) {
		Calendar calendar = Calendar.getInstance();
		calendar.clear();
		calendar.set(Calendar.YEAR, year);
		Date currYearFirst = calendar.getTime();
		return currYearFirst;
	}

	/**
	 * 获取当年的最后一天
	 * 
	 * @param year
	 * @return
	 */
	public static Date getLastOfYear(Date date) {
		Calendar currCal = Calendar.getInstance();
		currCal.setTime(date);
		int currentYear = currCal.get(Calendar.YEAR);
		return getLastOfYear(currentYear);
	}

	/**
	 * 获取某年最后一天日期
	 * 
	 * @param year
	 *            年份
	 * @return Date
	 */
	public static Date getLastOfYear(int year) {
		Calendar calendar = Calendar.getInstance();
		calendar.clear();
		calendar.set(Calendar.YEAR, year);
		calendar.roll(Calendar.DAY_OF_YEAR, -1);
		Date currYearLast = calendar.getTime();
		return currYearLast;
	}

	/**
	 * 获取当月第一天
	 * 
	 * @param Date
	 *            date
	 * @param String
	 *            format
	 * @return String
	 */
	public static String getFirstOfMonth(Date date, String pattern) {
		Calendar cal = Calendar.getInstance();// 获取当前日期
		cal.setTime(date);
		cal.add(Calendar.MONTH, 0);
		cal.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
		date = cal.getTime();
		SimpleDateFormat sf = new SimpleDateFormat(pattern);
		// System.out.println(firstDayOfMoth(new Date(), "yyyy-MM-dd
		// HH:mm:ss"));
		return sf.format(date);
	}

	/**
	 * 获取当月最后一天
	 * 
	 * @param Date
	 *            date,String pattern
	 * @return String
	 */
	public static String getLastOfMonth(Date date, String pattern) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.set(Calendar.DAY_OF_MONTH, 1);
		cal.add(Calendar.MONTH, 1);
		cal.add(Calendar.DATE, -1);
		date = cal.getTime();
		;
		SimpleDateFormat sf = new SimpleDateFormat(pattern);
		return sf.format(date);
	}

	/**
	 * 通过给定的年、月、周获得该周内的每一天日期
	 * 
	 * @param year
	 *            int 年
	 * @param month
	 *            int 月
	 * @param week
	 *            int 周
	 * @return List<Date> 七天的日期
	 */
	public static List<Date> getDayListByWeek(int year, int month, int week) {
		List<Date> list = new ArrayList<Date>();
		// 先滚动到该年.
		Calendar c = Calendar.getInstance();
		c.set(Calendar.YEAR, year);
		// 滚动到月:
		c.set(Calendar.MONTH, month - 1);
		// 滚动到周:
		c.set(Calendar.WEEK_OF_MONTH, week);
		// 得到该周第一天:
		for (int i = 0; i < 6; i++) {
			c.set(Calendar.DAY_OF_WEEK, i + 2);
			list.add(c.getTime());
		}
		// 最后一天:
		c.set(Calendar.WEEK_OF_MONTH, week + 1);
		c.set(Calendar.DAY_OF_WEEK, 1);
		list.add(c.getTime());
		/*
		 * List<Date> list = getDayListByWeek(2017,8,1 ); for (Date date : list)
		 * { System.out.println(DateUtils.dateFormat(date, "yyyy-MM-dd HH:mm:ss"
		 * )); }
		 */
		return list;
	}

	/**
	 * 用途:获得起始时间和结束时间范围内,所有的星期一和星期天 2017年8月5日 下午2:52:34 张进 return List<String>
	 */
	public static List<String> getMonAndSundayList(Date date1, Date date2) throws ParseException {
		List<String> list = new ArrayList<String>();
		String startMonday = getMondayOfThisWeek(date1, "yyyy-MM-dd");
		String endSunday = getSundayOfThisWeek(date2, "yyyy-MM-dd");
		Date dateOne = dateParse(startMonday, "yyyy-MM-dd");
		Date dateTwo = dateParse(endSunday, "yyyy-MM-dd");
		String result = "";
		Date da = dateOne;
		list.add(startMonday);
		for (int i = 0; i >= 0; i++) {
			if (DateUtils.dateCompare(da, dateTwo) == 0) {
				break;
			} else {
				if (i % 2 == 0) {
					da = dateAddDays(da, 6);
				} else {
					da = dateAddDays(da, 1);
				}
				result = DateUtils.dateFormat(da, "yyyy-MM-dd");
				list.add(result);
			}
		}
		/*
		 * List<String> list =
		 * getMonAndSundayList(dateParse("2016-06-05","yyyy-MM-dd"),dateParse(
		 * "2017-08-05","yyyy-MM-dd")); for (String string : list) {
		 * System.out.println(string); }
		 */
		return list;
	}

	/**
	 * 用途:获得起始时间和结束时间范围内,所有的月初和月末 2017年8月5日 下午3:28:49 张进 return List<String>
	 */
	public static List<String> getfirstAndLastListOfMonth(Date date1, Date date2)
			throws ParseException {
		List<String> list = new ArrayList<String>();
		String startFirstOfMonth = getFirstOfMonth(date1, "yyyy-MM-dd");
		String endLastOfMonth = getLastOfMonth(date2, "yyyy-MM-dd");
		Date dateOne = dateParse(startFirstOfMonth, "yyyy-MM-dd");
		Date dateTwo = dateParse(endLastOfMonth, "yyyy-MM-dd");
		Date da = dateOne;
		String result = "";
		Date comPareFlag;
		for (int i = 0; i >= 0; i++) {
			comPareFlag = dateParse(getLastOfMonth(da, "yyyy-MM-dd"), "yyyy-MM-dd");
			if (DateUtils.dateCompare(comPareFlag, dateTwo) == 0) {
				break;
			} else {
				result = getFirstOfMonth(da, "yyyy-MM-dd");
				list.add(result);
				result = getLastOfMonth(da, "yyyy-MM-dd");
				list.add(result);
				da = dateAddMonths(da, 1);
			}
		}
		String LastFirstOfMonth = getFirstOfMonth(date2, "yyyy-MM-dd");
		list.add(LastFirstOfMonth);
		list.add(endLastOfMonth);
		/*
		 * List<String> list =
		 * getfirstAndLastListOfMonth(dateParse("2016-06-05","yyyy-MM-dd"),
		 * dateParse("2017-08-05","yyyy-MM-dd")); for (String string : list) {
		 * System.out.println(string); }
		 */
		return list;
	}

	/**
	 * 用途:获得起始时间和结束时间范围内,所有的年初和年末 2017年8月5日 下午4:00:09 张进 return List<String>
	 */
	public static List<String> getfirstAndLastListOfYear(Date date1, Date date2)
			throws ParseException {
		List<String> list = new ArrayList<String>();
		String startFirstOfYear = dateFormat(getFirstOfYear(date1), "yyyy-MM-dd");
		String endLastOfYear = dateFormat(getLastOfYear(date2), "yyyy-MM-dd");
		Date dateOne = dateParse(startFirstOfYear, "yyyy-MM-dd");
		Date dateTwo = dateParse(endLastOfYear, "yyyy-MM-dd");
		Date da = dateOne;
		String result = "";
		Date comPareFlag;
		for (int i = 0; i >= 0; i++) {
			comPareFlag = getLastOfYear(da);
			if (DateUtils.dateCompare(comPareFlag, dateTwo) == 0) {
				break;
			} else {
				result = dateFormat(getFirstOfYear(da), "yyyy-MM-dd");
				list.add(result);
				result = dateFormat(getLastOfYear(da), "yyyy-MM-dd");
				list.add(result);
				da = dateAddYears(da, 1);
			}
		}
		String LastFirstOfYear = dateFormat(getFirstOfYear(date2), "yyyy-MM-dd");
		list.add(LastFirstOfYear);
		list.add(endLastOfYear);
		/*
		 * List<String> list =
		 * getfirstAndLastListOfYear(dateParse("2016-06-05","yyyy-MM-dd"),
		 * dateParse("2018-06-05","yyyy-MM-dd")); for (String string : list) {
		 * System.out.println(string); }
		 */
		return list;
	}

	public static void main(String[] args) throws Exception {

		// --->>>false

		List<String> list = getMonAndSundayList(dateParse("2017-06-26", "yyyy-MM-dd"),
				dateParse("2017-08-15", "yyyy-MM-dd"));
		for (String string : list) {
			System.out.println(string);
		}
	}

}
最近下载更多
二进制2  LV3 2023年1月6日
wyx065747  LV67 2022年3月20日
18720962954  LV4 2020年7月30日
moomin709  LV24 2020年7月6日
RinkaOvO  LV2 2020年4月23日
songdada123  LV2 2020年1月14日
cralchan  LV3 2020年1月9日
zxa541011  LV8 2019年7月5日
zhanghuohuo  LV19 2019年2月11日
forever25243  LV14 2019年1月15日
最近浏览更多
暂无贡献等级
sky1044  LV1 2月19日
surpriseY  LV1 2023年10月14日
lironggang  LV38 2023年4月25日
二进制2  LV3 2023年1月6日
啦啦啦7719  LV15 2022年10月8日
wyx065747  LV67 2022年3月20日
644800782  LV4 2022年3月8日
耀曜yao 2022年2月21日
暂无贡献等级
luozf1990  LV3 2022年1月6日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友