import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * <p> * TODO 关于<b>DateUtil</b>的说明 * </p> * * @author lixf * @version 1.0 * @since Pay-Plateform-Commons 1.0 * */ public class DateUtil { private static String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; private static DateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT); /** * 获取支付平台统一日期格式 * @return */ public static DateFormat getDateFomat(){ return dateFormat; } /** */ /** * 取得某天相加(减)后的那一天 * * @param date * @param num(可正可负) * @return */ public static Date getAnotherDate(Date date, int num) { Calendar c = Calendar.getInstance(); c.setTime(date); c.add(Calendar.DAY_OF_YEAR, num); return c.getTime(); } /** */ /** * 时间计算(毫秒) * * @param date * @param num(可正可负) * @return */ public static Date getAnotherDateByMilliSecond(Date date, int num) { Calendar c = Calendar.getInstance(); c.setTime(date); c.add(Calendar.MILLISECOND, num); return c.getTime(); } /** */ /** * 取得某月的的最后一天 * * @param year * @param month * @return */ public static Date getLastDayOfMonth(int year, int month) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, year);// 年 cal.set(Calendar.MONTH, month - 1);// 月,因为Calendar里的月是从0开始,所以要减1 cal.set(Calendar.DATE, 1);// 日,设为一号 cal.add(Calendar.MONTH, 1);// 月份加一,得到下个月的一号 cal.add(Calendar.DATE, -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();// 获得月末是几号 } public static Date getLastDayOfMonth(Date date) { return getLastDayOfMonth(getYear(date), getMonth(date)); } /** */ /** * 取得某月的的第一天 * * @param year * @param month * @return */ public static Date getFirstDayOfMonth(int year, int month) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, year);// 年 cal.set(Calendar.MONTH, month - 1);// 月,因为Calendar里的月是从0开始,所以要减1 cal.set(Calendar.DATE, 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();// 获得月初是几号 } public static Date getFirstDayOfMonth(Date date) { return getFirstDayOfMonth(getYear(date), getMonth(date)); } /** */ /** * 取得某年的第一天 * * @param year * @param month * @return */ public static Date getFirstDayOfYear(int year) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, year);// 年 cal.set(Calendar.MONTH, 0);// 月 cal.set(Calendar.DATE, 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();// 获得月初是几号 } /** */ /** * 取得某年的最后一天 * * @param year * @param month * @return */ public static Date getLastDayOfYear(int year) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, year);// 年 cal.set(Calendar.MONTH, 11);// 月 cal.set(Calendar.DATE, 31);// 日 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 year * @param month * @return */ public static Date getFirstDayOfHalf(int year, int Month) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, year);// 年 if (Month < 7) { cal.set(Calendar.MONTH, 0);// 月 cal.set(Calendar.DATE, 1);// 日6 } else { cal.set(Calendar.MONTH, 6);// 月 cal.set(Calendar.DATE, 1);// 日6 } 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 year * @param month * @return */ public static Date getLastDayOfHalf(int year, int Month) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, year);// 年 if (Month < 7) { cal.set(Calendar.MONTH, 5);// 月 cal.set(Calendar.DATE, 30);// 日 } else { cal.set(Calendar.MONTH, 11);// 月 cal.set(Calendar.DATE, 31);// 日 } 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 int getWeekOfYear(Date date) { Calendar c = new GregorianCalendar(); c.setFirstDayOfWeek(Calendar.MONDAY); c.setMinimalDaysInFirstWeek(7); c.setTime(date); return c.get(Calendar.WEEK_OF_YEAR); } /** */ /** * 取得某天是一年中的哪个半年 * * @param date * @return */ public static int getFirstOrLastOfYear(Date date) { int firstOrLast = 0; int month = getMonth(date); if (month >= 1 && month <=6) firstOrLast = 0; else firstOrLast = 1; return firstOrLast; } /** */ /** * 取得某天所在周的第一天 * * @param date * @return */ public static Date getFirstDayOfWeek(Date date) { Calendar c = new GregorianCalendar(); c.setFirstDayOfWeek(Calendar.MONDAY); c.setTime(date); c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); c.set(Calendar.HOUR_OF_DAY, 0);// 小时 c.set(Calendar.MINUTE, 0);// 分 c.set(Calendar.SECOND, 0);// 秒 c.set(Calendar.MILLISECOND, 0);// 毫秒 return c.getTime(); } /** */ /** * 取得某天所在周的最后一天 * * @param date * @return */ public static Date getLastDayOfWeek(Date date) { Calendar c = new GregorianCalendar(); c.setFirstDayOfWeek(Calendar.MONDAY); c.setTime(date); c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); c.set(Calendar.HOUR_OF_DAY, 0);// 小时 c.set(Calendar.MINUTE, 0);// 分 c.set(Calendar.SECOND, 0);// 秒 c.set(Calendar.MILLISECOND, 0);// 毫秒 return c.getTime(); } /** */ /** * 取得某一年共有多少周 * * @param year * @return */ public static int getMaxWeekNumOfYear(int year) { Calendar c = new GregorianCalendar(); c.set(year, Calendar.DECEMBER, 31, 23, 59, 59); return getWeekOfYear(c.getTime()); } /** */ /** * 取得某年某周的第一天 对于交叉:2008-12-29到2009-01-04属于2008年的最后一周,2009-01-05为2009年第一周的第一天 * * @param year * @param week * @return */ public static Date getFirstDayOfWeek(int year, int week) { Calendar calFirst = Calendar.getInstance(); calFirst.set(year, 0, 7); Date firstDate = getFirstDayOfWeek(calFirst.getTime()); Calendar firstDateCal = Calendar.getInstance(); firstDateCal.setTime(firstDate); Calendar c = new GregorianCalendar(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, Calendar.JANUARY); c.set(Calendar.DATE, firstDateCal.get(Calendar.DATE)); Calendar cal = (GregorianCalendar) c.clone(); cal.add(Calendar.DATE, (week - 1) * 7); firstDate = getFirstDayOfWeek(cal.getTime()); return firstDate; } /** */ /** * 取得某年某周的最后一天 对于交叉:2008-12-29到2009-01-04属于2008年的最后一周, 2009-01-04为 * 2008年最后一周的最后一天 * * @param year * @param week * @return */ public static Date getLastDayOfWeek(int year, int week) { Calendar calLast = Calendar.getInstance(); calLast.set(year, 0, 7); Date firstDate = getLastDayOfWeek(calLast.getTime()); Calendar firstDateCal = Calendar.getInstance(); firstDateCal.setTime(firstDate); Calendar c = new GregorianCalendar(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, Calendar.JANUARY); c.set(Calendar.DATE, firstDateCal.get(Calendar.DATE)); Calendar cal = (GregorianCalendar) c.clone(); cal.add(Calendar.DATE, (week - 1) * 7); Date lastDate = getLastDayOfWeek(cal.getTime()); return lastDate; } /** * <p> 方法 getYear</p> * 获取当前日期的年 * @param date * @return */ public static int getYear(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); int year = cal.get(Calendar.YEAR); return year; } /** * <p> 方法 getMonth</p> * 获取当前日期的月 * @param date * @return */ public static int getMonth(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); int month=cal.get(Calendar.MONTH)+1; return month; } /** * <p> 方法 getDate</p> * 获取当前日期的日 * @param date * @return */ public static int getDate(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); int day=cal.get(Calendar.DATE); return day; } /** * <p> 方法 getToday</p> * 获取当前日期的星期几 * @param date * @return */ public static int getToday(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); int today=cal.get(Calendar.DAY_OF_WEEK)-1; return today; } /** * <p> 方法 isSameDay</p> * 判断输入的两个日期是否是同一天 * @param date1 * @param date2 * @return */ public static boolean isSameDay(Date date1, Date date2) { Calendar cal1 = Calendar.getInstance(); cal1.setTime(date1); Calendar cal2 = Calendar.getInstance(); cal2.setTime(date2); if (cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) && cal1.get(Calendar.MONTH) == cal2.get(Calendar.MONTH) && cal1.get(Calendar.DATE) == cal2.get(Calendar.DATE)) { return true; } else { return false; } } public static Date getTodayBeginTime(Date date) { Calendar calendar = new GregorianCalendar(); calendar.setTime(date); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); return calendar.getTime(); } /** */ /** * 取得请求日期前一天的初始时刻 * * @param date * @return */ public static Date getPreviousDayBeginTime(Date date) { Calendar calendar = new GregorianCalendar(); calendar.setTime(date); calendar.add(Calendar.DAY_OF_MONTH, -1); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); return calendar.getTime(); } /** */ /** * 取得请求日期前一天的结束时刻 * * @param date * @return */ public static Date getPreviousDayEndTime(Date date) { Calendar calendar = new GregorianCalendar(); calendar.setTime(date); calendar.add(Calendar.DAY_OF_MONTH, -1); calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); return calendar.getTime(); } /** */ /** * 取得请求日期前一周的初始时刻 * * @param date * @return */ public static Date getPreviousWeekBeginTime(Date date) { Calendar calendar = new GregorianCalendar(); calendar.setTime(date); calendar.add(Calendar.WEEK_OF_YEAR, -1); calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); return calendar.getTime(); } /** */ /** * 取得请求日期前一周的结束时刻 * * @param date * @return */ public static Date getPreviousWeekEndTime(Date date) { Calendar calendar = new GregorianCalendar(); calendar.setTime(date); calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); return calendar.getTime(); } /** */ /** * 取得请求日期前一月的初始时刻 * * @param date * @return */ public static Date getPreviousMonthBeginTime(Date date) { Calendar calendar = new GregorianCalendar(); calendar.setTime(date); calendar.add(Calendar.MONTH, -1); calendar.set(Calendar.DAY_OF_MONTH, 1); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); return calendar.getTime(); } /** */ /** * 取得请求日期前一月的结束时刻 * * @param date * @return */ public static Date getPreviousMonthEndTime(Date date) { Calendar calendar = new GregorianCalendar(); calendar.setTime(date); calendar.add(Calendar.MONTH, -1); calendar.set(Calendar.DAY_OF_MONTH, calendar .getActualMaximum(Calendar.DAY_OF_MONTH)); calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); return calendar.getTime(); } /** */ /** * 取得请求日期是周几 * 1~7分别表示周日~周六 * * @param date * @return */ public static int getDayOfWeek(Date date) { Calendar calendar = new GregorianCalendar(); calendar.setTime(date); return calendar.get(Calendar.DAY_OF_WEEK); } /** */ /** * 取得请求日期是几号 * 1-28分别表示 每月的1-28号 * * @param date * @return */ public static int getDayOfMonth(Date date) { Calendar calendar = new GregorianCalendar(); calendar.setTime(date); return calendar.get(Calendar.DAY_OF_MONTH); } /** * <p> * 方法 beginDate * </p> * 获取某一天的开始时间 00:00:00 * * @param date * @return */ public static Date getBeginDate(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.HOUR, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); return calendar.getTime(); } /** * <p> * 方法endDate * </p> * 获取某一天的结束时间 23:59:59 * * @param date * @return */ public static Date getEndDate(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.HOUR, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); return calendar.getTime(); } /** * <p> 方法 tomorrow</p> * 给定的日期+1 * @param date yyyyMMdd * @return 返回给定日期+1 */ public static Date tomorrow(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DATE, 1); return calendar.getTime(); } /** * <p> 方法 NextHour</p> *获取下一整点 * @param date * @return */ public static Date NextHour(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.HOUR_OF_DAY, 1); return calendar.getTime(); } /** * @param date yyyy-MM-dd格式的日期 * @return 校验通过 true 不通过 false */ public static boolean isValidDate(String date){ String eL = "^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))"; Pattern p = Pattern.compile(eL); Matcher m = p.matcher(date); return m.matches(); } /** * <p> 方法 isValidDate2</p> * date yyyyMMdd 格式的日期校验 * @param date * @return 校验通过true 不通过false */ public static boolean isValidDate2(String date){ String eL = "^((\\d{2}(([02468][048])|([13579][26]))[\\/\\s]?((((0?[13578])|(1[02]))[\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\/\\s]?((((0?[13578])|(1[02]))[\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))"; Pattern p = Pattern.compile(eL); Matcher m = p.matcher(date); return m.matches(); } /** * <p> 方法 formatDate</p> * date string 类型转换成date * @param date * @return date */ public static Date formatDate(String date) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try { Date d = sdf.parse(date); return d; } catch (ParseException e) { e.printStackTrace(); } return null; } /** * <p> 方法 formatDate</p> * date string 类型转换成date * @param date * @return date */ public static String formatDateToString(Date date) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try { String d = sdf.format(date); return d; } catch (Exception e) { e.printStackTrace(); } return null; } /** * <p> 方法 formatDate</p> * date string 类型转换成date * @param date * @return date */ public static String formatDateToStr(Date date) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { String d = sdf.format(date); return d; } catch (Exception e) { e.printStackTrace(); } return null; } }