张晨的个人博客

Java处理Date时间格式的各种场景工具类(三)

张晨的个人博客2014-05-31Java技术 2939 0A+A-
public class DateUtil {
public enum DateType {
	YEAR, MONTH, DAY, HH, MI, SS, YYYY_MM_DD, YYYYMMDD
}



/**
 * 日期加运算
 * 
 * @param date
 *            需要加的日期
 * @param dateType
 *            需要加的类型<br>
 *            数值可以为年份,DateType.YEAR<br>
 *            数值可以为月份,DateType.MONTH<br>
 *            数值可以为天数,DateType.DAY<br>
 *            数值可以为小时,DateType.HH<br>
 *            数值可以为分钟,DateType.MI<br>
 *            数值可以为秒,DateType.SS
 * @param num
 *            需要加的数值
 * @return 加完之后的日期
 */
public static Date addDate(Date date, DateType dateType, int num) {
	Calendar c1 = Calendar.getInstance();
	c1.setTime(date);
	if (DateType.YEAR.equals(dateType)) {
		c1.add(Calendar.YEAR, num);
		return c1.getTime();
	}
	if (DateType.MONTH.equals(dateType)) {
		c1.add(Calendar.MONTH, num);
		return c1.getTime();
	}
	if (DateType.DAY.equals(dateType)) {
		c1.add(Calendar.DAY_OF_MONTH, num);
		return c1.getTime();
	}
	if (DateType.HH.equals(dateType)) {
		c1.add(Calendar.HOUR_OF_DAY, num);
		return c1.getTime();
	}
	if (DateType.MI.equals(dateType)) {
		c1.add(Calendar.MINUTE, num);
		return c1.getTime();
	}
	if (DateType.SS.equals(dateType)) {
		c1.add(Calendar.SECOND, num);
		return c1.getTime();
	}
	return date;
}

/**
 * 返回前一天。
 * 
 * @param date
 * @return
 */
public static java.sql.Date theDayBefore(Date date) {
	Calendar cdate = Calendar.getInstance();
	cdate.setTime(date);
	cdate.add(Calendar.DATE, -1);
java.sql.Date ldate = new java.sql.Date(cdate.getTime().getTime());
	return ldate;
}

/**
 * 得到当前月的第一天
 * 
 * @return
 */
public static java.sql.Date getNowMonth() {
	Calendar date = Calendar.getInstance();
	date.set(Calendar.DAY_OF_MONTH, 1);
java.sql.Date sysDate = new java.sql.Date(date.getTime().getTime());
	return sysDate;

}

/**
 * 指定月当月1日
 * 
 * @param date
 * @return
 */
public static java.sql.Date firstDayOfMonth(Date date) {
	Calendar cal = Calendar.getInstance();
	if (date != null)
		cal.setTime(date);
	cal.set(Calendar.DAY_OF_MONTH, 1);
	cal.set(Calendar.HOUR_OF_DAY, 0);
	cal.set(Calendar.MINUTE, 0);
	cal.set(Calendar.SECOND, 0);
	cal.set(Calendar.MILLISECOND, 0);
	return new java.sql.Date(cal.getTimeInMillis());
}

/**
 * 得到指定日期的在这个月的第一日. 00:00:00
 * 
 * @param date
 * @return
 */
public static Date getFirstDayOfMonth(Date date) {
	Calendar cal = Calendar.getInstance();
	if (date != null)
		cal.setTime(date);
	cal.set(Calendar.DAY_OF_MONTH, 1);
	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();
}

/**
 * 得到上月1日
 * 
 * @return
 */
public static java.sql.Date getlastMonth() {
	Calendar date = Calendar.getInstance();
	date.add(Calendar.MONTH, -1);
	date.set(Calendar.DAY_OF_MONTH, 1);
java.sql.Date sysDate = new java.sql.Date(date.getTime().getTime());
	return sysDate;
}

/**
 * 指定月上月1日
 * 
 * @return
 */
public static java.sql.Date firstDayOfLastMonth(Date date) {
	Calendar cal = Calendar.getInstance();
	if (date != null)
		cal.setTime(date);
	cal.add(Calendar.MONTH, -1);
	cal.set(Calendar.DAY_OF_MONTH, 1);
	cal.set(Calendar.HOUR_OF_DAY, 0);
	cal.set(Calendar.MINUTE, 0);
	cal.set(Calendar.SECOND, 0);
	cal.set(Calendar.MILLISECOND, 0);
	return new java.sql.Date(cal.getTimeInMillis());

}

/**
 * 指定月次月1日
 * 
 * @param calcdate
 * @return
 * @throws ParseException
 */
public static String firstDayOfNextMonth(String calcdate) {
  return DateUtil.date2String(DateUtil.firstDayOfNextMonth(DateUtil
			.string2Date(calcdate)));
}

/**
 * 指定日次月1日
 * 
 * @param calcdate
 * @return
 * @throws ParseException
 */
public static java.sql.Date firstDayOfNextMonth(Date calcdate) {
	Calendar date = Calendar.getInstance();
	date.setTime(calcdate);
	date.add(Calendar.MONTH, 1);// 设置月为下个月
	// 设置日为月第一天
 date.set(Calendar.DAY_OF_MONTH, date.getMinimum(Calendar.DAY_OF_MONTH));
	java.sql.Date sysDate = new java.sql.Date(date.getTime().getTime());
	return sysDate;
}

/**
 * 日期比较
 * <p>
 * 开始日期在结束日期之前返回-1<br>
 * 开始日期等于结束日期返回0<br>
 * 开始日期在结束日期之后返回1
 * 
 * @param startDate
 *            起始日期
 * @param endDate
 *            结束日期
 * @return
 */
public static int compareDate(Date startDate, Date endDate) {

	// 去除掉时分秒的时间
	startDate = DateUtil.string2Date(startDate.toString());
	endDate = DateUtil.string2Date(endDate.toString());

	if (startDate.before(endDate)) {
		return -1;
	}
	if (startDate.equals(endDate)) {
		return 0;
	}
	if (startDate.after(endDate)) {
		return 1;
	}
	return -2;
}

/**
 * 得到本年指定日期的相关月份的最后一日 00:00:00
 * 
 * @param date
 * @return
 */
public static Date getLastDayOfMonthThisYear(Date date) {
	Calendar cal = Calendar.getInstance();
	if (date != null)
		cal.setTime(date);
	cal.set(Calendar.DAY_OF_MONTH,
			cal.getActualMaximum(Calendar.DAY_OF_MONTH));
	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 date
 *            指定日期
 * @return 当月最后一天
 */
public static java.sql.Date getLastDayOfMonth(Date date) {
	Calendar cal = Calendar.getInstance();
	if (date != null)
		cal.setTime(date);
	cal.add(Calendar.MONTH, 1);
	cal.set(Calendar.DAY_OF_MONTH, 1);
	cal.add(Calendar.DAY_OF_MONTH, -1);
	return new java.sql.Date(cal.getTime().getTime());
}

/**
 * 得到前一个月的1号
 * 
 * @param date
 *            指定日期
 * @return 前一个月的1号
 */
public static java.sql.Date getBeforeMonth(Date date) {
	Calendar cal = Calendar.getInstance();
	if (date != null)
		cal.setTime(date);
	cal.add(Calendar.MONTH, -1);
	cal.set(Calendar.DAY_OF_MONTH, 1);
	return new java.sql.Date(cal.getTime().getTime());
}

/** 
* 得到给定时间所在季度前后的某个季度的开始时间,返回时间格式:2014-01-01
* @param date
* @param differ
* @return Date
* @description:以给定时间所在季度为原点,则:
* 			   当前季度  differ=0,前一个季度 differ=-1,
前前一个季度 differ=-2,下一个季度 differ=1,下下个季度 differ=2
*/
public static Date getQuarterStartTime(Date date, int differ){
	Calendar c = Calendar.getInstance();
	c.setTimeInMillis(date.getTime());
	int currentMonth = c.get(Calendar.MONTH) + 1;
	Date now = new Date();
	int month = 0;
	try {
		if (currentMonth >= 1 && currentMonth <= 3) {
			month = 0;
		} else if (currentMonth >= 4 && currentMonth <= 6) {
			month = 3;
		} else if (currentMonth >= 7 && currentMonth <= 9) {
			month = 6;
		} else if (currentMonth >= 10 && currentMonth <= 12) {
			month = 9;
		}
		month += differ *3;
		c.set(Calendar.MONTH, month);
		c.set(Calendar.DATE, 1);
		now.setTime(c.getTimeInMillis());
		now = DateUtil.string2Date(date2String(now));
	} catch (Exception e) {
		e.printStackTrace();
	}
	return now;
}

/** 
* 得到前季度的开始时间,返回时间格式:2014-01-01
* @return Date
* @description:以当前季度为原点,则:
* 			   当前季度  differ=0,前一个季度 differ=-1,
前前一个季度 differ=-2,下一个季度 differ=1,下下个季度 differ=2
*/
public static Date getQuarterStartTime(int differ) {
	return getQuarterStartTime(new Date(), differ);
}

/** 
* 
* 得到给定时间所在季度前后的某个季度的最后一天,返回时间格式:2014-03-31
* @param date
* @param differ
* @return Date
* @description:以给定时间所在季度为原点,则:
* 			   当前季度  differ=0,前一个季度 differ=-1,
前前一个季度 differ=-2,下一个季度 differ=1,下下个季度 differ=2
*/
public static Date getQuarterEndTime(Date date, int differ){
	Calendar c = Calendar.getInstance();
	c.setTimeInMillis(date.getTime());
	int currentMonth = c.get(Calendar.MONTH) + 1;
	Date now = new Date();
	int month = 0;
	try {
		if (currentMonth >= 1 && currentMonth <= 3) {
			month = 2;
		} else if (currentMonth >= 4 && currentMonth <= 6) {
			month = 5;
		} else if (currentMonth >= 7 && currentMonth <= 9) {
			month = 8;
		} else if (currentMonth >= 10 && currentMonth <= 12) {
			month = 11;
		}
		month += differ *3;
		c.set(Calendar.MONTH, month);
		c.set(Calendar.DATE, 1);
		now.setTime(c.getTimeInMillis());
	now = DateUtil.string2Date(date2String(getLastDayOfMonth(now)));
	} catch (Exception e) {
		e.printStackTrace();
	}
	return now;
}

/** 
* 
* 得到当前季度前后的某个季度的最后一天,返回时间格式:2014-03-31
* @param date
* @return Date
* @description:以当前季度为原点,则:
* 			   当前季度  differ=0,前一个季度 differ=-1,
前前一个季度 differ=-2,下一个季度 differ=1,下下个季度 differ=2
*/
public static Date getQuarterEndTime(Date date){
	return getQuarterEndTime(date, 0);
}

/** 
* 得到某年的第一天
* @param date 
* 			要得年的第一天的年中任意月份
* @return Date
* 			一年的第一天 例:2014-1-1
* @description:
*/
public static Date getFirstDayOfYear(Date date){
	Calendar c = Calendar.getInstance();
	c.setTimeInMillis(date.getTime());
	c.set(Calendar.MONTH, 0);
	c.set(Calendar.DAY_OF_MONTH, 1);
	return date2date(c.getTime());
}

/**
 * 得到日期中的“日”
 * 
 * @param date
 *            指定日期
 * @return 日期中的“日”
 */
public static int getDayOfDate(Date date) {
	Calendar cal = Calendar.getInstance();
	if (date != null)
		cal.setTime(date);
	return cal.get(Calendar.DAY_OF_MONTH);
}

/** 
* 得到日期中的“月”
* @param date
* @return int
* @description:从0开始 0 表示1月
*/
public static int getMonthOfDate(Date date){
	Calendar cal = Calendar.getInstance();
	if (date != null)
		cal.setTime(date);
	return cal.get(Calendar.MONTH);
}

public boolean equals(Object obj) {
//		System.out.println("hello");
	return false;
}

/**
 * 得到指定日期的在这个月的第一日
 * 
 * @param date
 * @return
 */
public static java.sql.Date getFirstDayOfDateMonth(Date date) {
	Calendar cal = Calendar.getInstance();
	if (date != null)
		cal.setTime(date);
	cal.set(Calendar.DAY_OF_MONTH, 1);
	cal.set(Calendar.HOUR_OF_DAY, 0);
	cal.set(Calendar.MINUTE, 0);
	cal.set(Calendar.SECOND, 0);
	cal.set(Calendar.MILLISECOND, 0);
java.sql.Date ldate = new java.sql.Date(cal.getTime().getTime());
	return ldate;
}

/**
 * 将java.sql.Timestamp类型日期,或java.util.Date类型转换为java.sql.Date类型
 * 
 * @param obj
 * @return
 */
public static java.sql.Date obj2SqlDate(Object obj) {
	if (obj instanceof java.util.Date) {
	return new java.sql.Date(((java.util.Date) obj).getTime());
	}
	throw new RuntimeException("入参不为日期类型");
}

/**
 * 将java.sql.Date类型日期,
 *或java.util.Date类型转换为java.sql.Timestamp类型
 * 
 * @param obj
 * @return
 */
public static Timestamp obj2Timestamp(Object obj) {
	if (obj instanceof java.util.Date) {
	return new java.sql.Timestamp(((java.util.Date) obj).getTime());
	}
	throw new RuntimeException("入参不为日期类型");
}

/**
 * 计算年龄
 * <p>
 * 当前系统日期减去生日,得到年龄
 * 
 * @param birthday
 *            生日
 * @return 年龄
 */
public static double calcAge(java.util.Date birthday) {
	return DateUtil.calcAge(birthday,
		new java.sql.Date(System.currentTimeMillis()));

}

/**
 * 计算年龄
 * <p>
 * 指定日期减去生日,得到年龄
 * 
 * @param birthday
 *            生日
 * @param date
 *            指定日期
 * @return 年龄
 */
public static double calcAge(java.util.Date birthday, java.util.Date date) {
	Calendar _birthday = Calendar.getInstance();
	_birthday.setTime(birthday);
	Calendar _sysDate = Calendar.getInstance();
	_sysDate.setTimeInMillis(date.getTime());
	return _sysDate.get(Calendar.YEAR)
		- _birthday.get(Calendar.YEAR)
	+ (_sysDate.get(Calendar.MONTH) - _birthday.get(Calendar.MONTH))
		/ 12.00
		+ (_sysDate.get(Calendar.DAY_OF_MONTH) - _birthday
				.get(Calendar.DAY_OF_MONTH)) / 365.00;
}

	public static void main(String[] args) {
System.out.println(DateUtil.calcAge(DateUtil.string2Date("1988-3-5")));
System.out.println(DateUtil.calcAge(DateUtil.string2Date("1988-3-6")));
System.out.println(DateUtil.calcAge(DateUtil.string2Date("1988-3-7")));
System.out.println(DateUtil.getQuarterStartTime(new Date(),-2));
System.out.println(DateUtil.getFirstDayOfYear(new Date()));
System.out.println(DateUtil.getBeforeMonth(new Date()));
System.out.println(DateUtil.getlastMonth());
System.out.println(DateUtil.dateBetween(string2Date("2012-01-01")
	, string2Date("2012-01-01"),DateType.MONTH));
System.out.println(DateUtil.getQuarterEndTime(new Date(), 3));
System.out.println(DateUtil.firstDayOfNextMonth(new Date()));
System.out.println(DateUtil.date2String(DateUtil.addDate(new Date()
	, DateType.MONTH, -3)));
System.out.println(DateUtil.firstDayOfMonth(new Date()));
System.out.println(DateUtil.firstDayOfLastMonth(new Date()));
System.out.println(DateUtil.getMonthOfDate(new Date()));
System.out.println(DateUtil.date2String(DateUtil.addDate(
	DateUtil.string2Date("2014-5-31"), DateType.MONTH, 1)));
System.out.println(DateUtil.getDayOfDate(new Date()));
	}
}

 

文章关键词
Java
Date
java时间处理
发表评论