Date工具类

public class DateUtil extends org.apache.commons.lang3.StringUtils {
	public static final String ISO_DATE_FORMAT = "yyyy-MM-dd";

	public static final String ISO_DATETIME_NO_T_FORMAT = "yyyy-MM-dd HH:mm:ss";

	public static final String ISO_DATE_NO_HYPHEN_FORMAT = "yyyyMMdd";

	public static final String ISO_DATETIME_NO_HYPHEN_AND_T_FORMAT = "yyyyMMdd HH:mm:ss";

	/**
	 * 将timestamp转换为Date类型
	 */
	public static Date convertTimestampToDate(Timestamp timestamp) {
		return new Date(timestamp.getTime());
	}

	/**
	 * 将日期按照指定模式转换为字符串
	 * 
	 * @param date
	 *            日期
	 * @param pattern
	 *            指定模式
	 * @return 转换后的字符串
	 */
	public static String convertToString(final Date date, final String pattern) {
		if (date != null) {
			return new SimpleDateFormat(pattern).format(date);
		} else {
			return null;
		}
	}

	/**
	 * 将字符串按照指定格式转换为日期
	 * 
	 * @param source
	 *            字符串
	 * @param pattern
	 *            指定格式
	 * @return 日期
	 * @throws ParseException
	 */
	public static Date converToDate(final String source, final String pattern) throws ParseException {
		return new SimpleDateFormat(pattern).parse(source);
	}

	/**
	 * 取得当前年份
	 * 
	 * @return 当前年份
	 */
	public static int getCurrentYear() {
		Calendar calendar = Calendar.getInstance();
		return calendar.get(Calendar.YEAR);
	}

	/**
	 * 取得当前月份
	 * 
	 * @return 当前月份
	 */
	public static int getCurrentMonth() {
		Calendar calendar = Calendar.getInstance();
		return calendar.get(Calendar.MONTH) + 1;
	}

	/**
	 * 取得当前月份的第一天对应的日期字符串
	 */
	public static String getBeginDateOfMonth() {
		Calendar calendar = Calendar.getInstance();
		String year = String.valueOf(calendar.get(Calendar.YEAR));
		String month = calendar.get(Calendar.MONTH) < 9 ? "0" + String.valueOf(calendar.get(Calendar.MONTH) + 1) : String.valueOf(calendar.get(Calendar.MONTH) + 1);
		return year + "-" + month + "-01";
	}

	/**
	 * 取得今天对应的日期字符串
	 */
	public static String getCurrentDate() {
		return convertToString(new Date(), ISO_DATE_FORMAT);
	}

	/**
	 * 判断一个日期字符串是否合法
	 * 
	 * @param date
	 *            日期字符串
	 * @param pattern
	 *            日期模式
	 * @return 合法则返回true
	 */
	public static boolean isValidDate(final String date, final String pattern) {
		if (date != null) {
			try {
				converToDate(date, pattern);
				return true;
			} catch (ParseException e) {
				return false;
			}
		} else {
			return false;
		}
	}

	/**
	 * 将日期转换为当日开始的日期
	 */
	public static Date getBeginDateOfDay(final Date date) {
		try {
			return converToDate(convertToString(date, ISO_DATE_FORMAT) + " 00:00:00", ISO_DATETIME_NO_T_FORMAT);
		} catch (ParseException e) {
			throw new RuntimeException(e.getMessage(), e); // Will Never happen
		}
	}

	/**
	 * 将输入的日期字符串转换为当日开始日期
	 * 
	 * @throws ParseException
	 */
	public static Date getBeginDateOfDay(final String date, final String pattern) throws ParseException {
		return converToDate(date + " 00:00:00", pattern);
	}

	/**
	 * 将输入日期转换为当日结束日期
	 */
	public static Date getEndDateOfDay(final Date date) {
		try {
			return converToDate(convertToString(date, ISO_DATE_FORMAT) + " 23:59:59", ISO_DATETIME_NO_T_FORMAT);
		} catch (ParseException e) {
			throw new RuntimeException(e.getMessage(), e); // Will Never happen
		}
	}

	/**
	 * 将输入的日期字符串转换为当日结束日期
	 * 
	 * @throws ParseException
	 */
	public static Date getEndDateOfDay(final String date, final String pattern) throws ParseException {
		return converToDate(date + " 23:59:59", pattern);
	}

	/**
	 * 求某年月的第一天 java里0到11分别是1到12月
	 * 
	 * @param year
	 * @param month
	 * @return Date
	 */
	public static Date getMonthFirst(int year, int month) {
		Calendar calendar = Calendar.getInstance();
		calendar.clear();
		calendar.set(Calendar.YEAR, year);
		calendar.set(Calendar.MONTH, month);
		Date currYearFirst = calendar.getTime();
		return currYearFirst;
	}

	/**
	 * 求某年月的最后一天 java里0到11分别是1到12月
	 * 
	 * @param year
	 * @param month
	 * @return Date
	 */
	public static Date getMonthLast(int year, int month) {
		Calendar calendar = Calendar.getInstance();
		calendar.clear();
		calendar.set(Calendar.YEAR, year);
		calendar.set(Calendar.MONTH, month);
		calendar.roll(Calendar.DAY_OF_MONTH, -1);// 向指定日历字段添加指定(有符号的)时间量,不更改更大的字段。负的时间量意味着向下滚动。
		Date currMonthLast = calendar.getTime();

		return currMonthLast;
	}

	/**
	 * 某年某月第几周第几天 是几月几号
	 * 
	 * @param year
	 *            年份
	 * @param month
	 *            月份
	 * @param weekOfMonth
	 *            这个月的第几周
	 * @param dayOfWeek
	 *            星期几
	 * @return
	 */
	public static String weekDateToData(int year, int month, int weekOfMonth, int dayOfWeek) {
		Calendar c = Calendar.getInstance();
		// 计算出 x年 y月 1号 是星期几
		c.set(year, month - 1, 1);

		// 如果i_week_day =1 的话 实际上是周日
		int i_week_day = c.get(Calendar.DAY_OF_WEEK);

		int sumDay = 0;
		// dayOfWeek+1 就是星期几(星期日 为 1)
		if (i_week_day == 1) {
			sumDay = (weekOfMonth - 1) * 7 + dayOfWeek + 1;
		} else {
			sumDay = 7 - i_week_day + 1 + (weekOfMonth - 1) * 7 + dayOfWeek + 1;
		}
		// 在1号的基础上加上相应的天数
		c.set(Calendar.DATE, sumDay);
		SimpleDateFormat sf2 = new SimpleDateFormat("yyyy-MM-dd");
		return sf2.format(c.getTime());
	}

	/**
	 * 获得当天之后的N天日期
	 * 
	 * @param num
	 *            当天后的第N天
	 * @return 返回的日期
	 */
	public static List<String> getNextDays(int num) {
		List<String> list = new ArrayList<String>();
		SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-DD");
		for (int i = 1; i < num; i++) {
			list.add(sdf.format(getAfterDate(i)));
		}
		return list;
	}

	/**
	 * 获取当前日期n天后的日期
	 * 
	 * @param n
	 *            :返回当天后的第N天
	 * @return 返回的日期
	 */
	public static Date getAfterDate(int n) {
		Calendar c = Calendar.getInstance();
		c.add(Calendar.DAY_OF_MONTH, n);
		return c.getTime();
	}

	/**
	 * 获取当前日期n天后的日期
	 * 
	 * @param n
	 *            :返回当天后的第N天
	 * @return 返回的日期
	 */
	public static Date getAfterDate(Date date, int n) {
		Calendar calendar = new GregorianCalendar();
		calendar.setTime(date);
		calendar.add(Calendar.DAY_OF_MONTH, n);
		return calendar.getTime();
	}

	/**
	 * 判断今天是不是周末
	 * 
	 * @return
	 */
	public static boolean isTodayWeekend() {

		Calendar c = Calendar.getInstance(); // 获取当前日期
		int day = c.get(Calendar.DAY_OF_WEEK); // 获取当前日期星期,英国算法(周日为一周第一天)
		if (day == 7 || day == 1) { // 如果是周六或周日就返回true
			return true;
		}
		return false;
	}

	/**
	 * @param specifiedStrDate
	 *            指定日期
	 * @param dateForamtType
	 *            指定日期格式
	 * @param intervalNum
	 *            间隔数(周或者天)
	 * @param calenderParam
	 *            指定修改日期格式的属性Calendar.WEEK_OF_MONTH(周)或者Calendar.DAY_OF_MONTH(天)
	 * @return
	 */
	public static String getIntervalStrDate(String specifiedStrDate, String dateForamtType, int intervalNum, int calenderParam) {
		if (specifiedStrDate == null) {
			return null;
		}
		if (specifiedStrDate.trim().equals("")) {
			return null;
		}

		DateFormat df = new SimpleDateFormat(dateForamtType);

		Calendar cal = Calendar.getInstance();
		cal.setTime(DateUtil.turnStrDateToJavaUtilDate(specifiedStrDate, dateForamtType));
		cal.add(calenderParam, intervalNum);
		return df.format(cal.getTime());
	}

	/**
	 * 判断两个字符串型日期是否指同一天
	 * 
	 * @param strDate
	 *            字符串日期
	 * @param anotherStrDate
	 *            另一个字符日期
	 * @return
	 */
	public static boolean isTwoStrDateTheSameDay(String strDate, String anotherStrDate) {

		DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		Date firstStrDate = null;
		Date secondStrDate = null;
		try {
			firstStrDate = df.parse(strDate);
			secondStrDate = df.parse(anotherStrDate);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		if (firstStrDate.getTime() > secondStrDate.getTime()) {

			return false;
		} else if (firstStrDate.getTime() < secondStrDate.getTime()) {

			return false;
		} else if (firstStrDate.getTime() == secondStrDate.getTime()) {

			return true;
		} else {

			return false;
		}
	}

	public static boolean isTheLastDayOfCurrentMonth(Object targetObj, String formtStr) {

		boolean flag = false;
		if (targetObj == null) {// 如果传入日期参数为null,则返回false
			return flag;
		} else if ("".equals(targetObj.toString())) {// 如果传入日期参数为空字符串,则返回false
			return flag;
		}

		String srcDate = "";
		if (targetObj.getClass() == String.class) {
			srcDate = DateUtil.turnJavaUtilDateToStrDate(DateUtil.turnStrDateToJavaUtilDate(targetObj.toString(), "yyyy-MM-dd"), formtStr);
		} else if (targetObj.getClass() == Date.class) {
			srcDate = DateUtil.turnJavaUtilDateToStrDate((Date) targetObj, formtStr);
		} else {
			srcDate = DateUtil.turnJavaUtilDateToStrDate(new Date(), "yyyy-MM-dd");
		}
		if (srcDate.compareTo(DateUtil.getTheLastDayOfCurrentMonth()) == 0) {// 和当前月最后一天比较的结果为0,则是当前月最后一天
			flag = true;
			return flag;
		} else {
			return flag;
		}
	}

	/**
	 * 指定日期、相加月数值、格式,得到相加日期
	 * 
	 * @param date
	 *            指定日期
	 * @param formtStr
	 *            格式
	 * @param number
	 *            数组
	 * @param calender
	 *            指定修改日期格式数组
	 * @return
	 */
	public static String tragetDate(String date, String formtStr, int number, int calender) {
		if (date == null) {
			return null;
		}

		if (date.trim().equals("")) {
			return null;
		}
		DateFormat df = new SimpleDateFormat(formtStr);// "yyyy-MM-dd"

		Calendar cal = Calendar.getInstance();
		cal.setTime(DateUtil.toDate(date));
		cal.add(calender, number);
		return df.format(cal.getTime());
	}

	/**
	 * 按照"yyyy-MM-dd"格式将字符串date转换为日期对象
	 * 
	 * @param date
	 * @return
	 */
	public static java.util.Date toDate(String date) {
		if (date == null) {
			return null;
		}
		if (date.trim().equals("")) {
			return null;
		}
		java.text.SimpleDateFormat simformat = new SimpleDateFormat("yyyy-MM-dd");
		try {
			return simformat.parse(date);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 获取当前月最后一天的字符串日期
	 * 
	 * @return
	 */
	public static String getTheLastDayOfCurrentMonth() {

		DateFormat df = new SimpleDateFormat("yyyy-MM-dd");//
		Calendar cal = Calendar.getInstance();// 获取当前日期,例如2012-08-02
		cal.set(Calendar.DAY_OF_MONTH, 1);// 转变为当前月的第一天,例如2012-08-01
		cal.add(Calendar.MONTH, 1);// 转变为下个月的第一天,例如2012-09-01
		cal.add(Calendar.DAY_OF_MONTH, -1);// 下个月第一天,倒数一天,即为当前月的最后一天。例如2012-08-31
		return df.format(cal.getTime());
	}

	/**
	 * 将java.util.Date型日期转化指定格式的字符串型日期
	 * 
	 * @param javaUtilDate
	 *            传入的java.util.Date型日期
	 * @param dateFormatType
	 *            指定格式的字符串型日期
	 * @return
	 */
	public static String turnJavaUtilDateToStrDate(java.util.Date javaUtilDate, String dateFormatType) {

		String strDate = "";
		if (javaUtilDate != null) {

			SimpleDateFormat sdf = new SimpleDateFormat(dateFormatType);
			strDate = sdf.format(javaUtilDate);
		}
		return strDate;
	}

	/**
	 * 按指定的字符串格式将字符串型日期转化为java.util.Date型日期
	 * 
	 * @param strDate
	 *            字符型日期
	 * @param dateFormatType
	 *            指定日期格式
	 * @return
	 */
	public static java.util.Date turnStrDateToJavaUtilDate(String strDate, String dateFormatType) {
		java.util.Date javaUtilDate = null;
		java.text.DateFormat df = new java.text.SimpleDateFormat(dateFormatType);
		if (strDate != null && (!"".equals(strDate)) && dateFormatType != null && (!"".equals(dateFormatType))) {
			try {
				javaUtilDate = df.parse(strDate);
			} catch (ParseException e) {
				e.printStackTrace();
			}
		}
		return javaUtilDate;
	}

	/**
	 * 将util.date转换成XMLGregorianCalendar
	 * */
	@SuppressWarnings("static-access")
	public static XMLGregorianCalendar getXMLGregorianCalendar(Date date) throws Exception {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		DatatypeFactory dtf = DatatypeFactory.newInstance();
		return dtf.newXMLGregorianCalendar(calendar.get(calendar.YEAR), calendar.get(calendar.MONTH) + 1, calendar.get(calendar.DAY_OF_MONTH), calendar.get(calendar.HOUR),
				calendar.get(calendar.MINUTE), calendar.get(calendar.SECOND), calendar.get(calendar.MILLISECOND), calendar.get(calendar.ZONE_OFFSET) / (1000 * 60));
	}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值