发表评论
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())); } }