package com.taobao.tddl.qatest.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.Locale; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * Comment for DateUtil * <p/> * Author By: manhong.yqd Created Date: 2010-12-2 ����01:43:03 */ public class DateUtil { // logger private static Log log = LogFactory.getLog(DateUtil.class); /** yyyy/MM/dd HH:mm:ss */ public static final String DATETIME_FULLSLASH = "yyyy/MM/dd HH:mm:ss"; // 19 /** yyyy-MM-dd HH:mm:ss */ public static final String DATETIME_FULLHYPHEN = "yyyy-MM-dd HH:mm:ss"; /** yyyy/MM/dd HH:mm */ public static final String DATETIME_HM_SLASH = "yyyy/MM/dd HH:mm"; // 16 /** yyyy-MM-dd HH:mm */ public static final String DATETIME_HM_HYPHEN = "yyyy-MM-dd HH:mm"; /** yyyy/MM/dd */ public static final String DATE_FULLSLASH = "yyyy/MM/dd"; // 10 /** yyyy-MM-dd */ public static final String DATE_FULLHYPHEN = "yyyy-MM-dd"; /** yyyy/MM */ public static final String DATE_YM_SLASH = "yyyy/MM"; // 7 /** yyyy-MM */ public static final String DATE_YM_HYPHEN = "yyyy-MM"; /** HH:mm:ss */ public static final String TIME_HMS_HYPHEN = "HH:mm:ss"; /** ������ʽ:yyyy/MM/dd HH:mm:ss ���� yyyy-MM-dd HH:mm:ss */ private static final String V_DATETIME_FULL = "[0-9]{4}[\\/-]{1}[0-9]{2}[\\/-]{1}[0-9]{2} [0-9]{2}\\:[0-9]{2}\\:[0-9]{2}"; // 19 /** ������ʽ:yyyy/MM/dd HH:mm ���� yyyy-MM-dd HH:mm */ private static final String V_DATETIME_HM_FULL = "[0-9]{4}[\\/-]{1}[0-9]{2}[\\/-]{1}[0-9]{2} [0-9]{2}\\:[0-9]{2}"; // 13 /** ������ʽ:yyyy/MM/dd ���� yyyy-MM-dd */ private static final String V_DATE_FULL = "[0-9]{4}[\\/-]{1}[0-9]{2}[\\/-]{1}[0-9]{2}"; // 10 /** ������ʽ:yyyy/MM ���� yyyy-MM */ private static final String V_DATE_YM = "[0-9]{4}[\\/-]{1}[0-9]{2}"; // 7 private static final Map<Integer, String> VALIDATE_MAP = Collections.synchronizedMap(new HashMap<Integer, String>()); static { VALIDATE_MAP.put(DATETIME_FULLHYPHEN.length(), V_DATETIME_FULL); VALIDATE_MAP.put(DATETIME_HM_HYPHEN.length(), V_DATETIME_HM_FULL); VALIDATE_MAP.put(DATE_FULLHYPHEN.length(), V_DATE_FULL); VALIDATE_MAP.put(DATE_YM_HYPHEN.length(), V_DATE_YM); } /** * ������ת����ָ����ʽ���ַ� * * @param date * @param pattern * @return */ public static String formatDate(Date date, String pattern) { if (date == null) { return null; } if (StringUtils.isBlank(pattern)) { return null; } SimpleDateFormat fmt = new SimpleDateFormat(pattern); String convStr = fmt.format(date); return convStr; } /** * ���ض���ʽ���ַ�ת�������� * * @param inDate * @return */ public static Date parseDate(String inDate, String convPattern) { if (StringUtils.isBlank(inDate)) { return null; } if (convPattern == null) { return null; } if (!validate(inDate)) { return null; } SimpleDateFormat formatter = new SimpleDateFormat(convPattern); formatter.setLenient(false); Date date = null; try { date = formatter.parse(inDate); } catch (ParseException e) { log.warn("date parse error", e); } return date; } /** * ��Date������ת����Calendar * * @param date * @return */ public static Calendar convertCalendar(Date date) { Calendar calendar = null; if (date != null) { calendar = Calendar.getInstance(); calendar.setTime(date); } return calendar; } /** * ��Calendar������ת����Date * * @param cal * @return */ public static Date convertDate(Calendar cal) { Date date = null; if (cal != null) { date = cal.getTime(); } return date; } /** * ���ڼ��� * * @param inData * @return */ private static boolean validate(String inData) { if (StringUtils.isEmpty(inData)) { return false; } String checkPattern = VALIDATE_MAP.get(inData.length()); if (checkPattern == null) { return false; } boolean isValidate = inData.matches(checkPattern); return isValidate; } /** * ���ص������һ����ַ����� * * @param date * @return */ public static String getLastDay(Date date) { Calendar cal = convertCalendar(date); int value = cal.getActualMaximum(Calendar.DAY_OF_MONTH); cal.set(Calendar.DAY_OF_MONTH, value); return formatDate(cal.getTime(), DATE_FULLHYPHEN); } /** * ��time��ճ�00:00:00 * * @param date * @return */ public static String truncDate(Date date) { Calendar cal = convertCalendar(date); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); return formatDate(cal.getTime(), DATETIME_FULLHYPHEN); } /** * �ж��Ƿ�Ϊ���� * * @param year * @return */ public static boolean isLeapYear(int year) { Calendar calendar = Calendar.getInstance(); calendar.set(year, 2, 1); calendar.add(Calendar.DATE, -1); if (calendar.get(Calendar.DAY_OF_MONTH) == 29) { System.out.println(year + " year is a leap year."); return true; } else { System.out.println(year + " year is not a leap year."); return false; } } /** * �������/��� * * @param Date date * @param Date date1 * @return �������������� */ public static int getDiffDate(Date date, Date date1) { return (int) ((date.getTime() - date1.getTime()) / (24 * 3600 * 1000)); } /** * �������/��� * * @param Calendar date * @param Calendar date1 * @return �������������� */ public static int getDiffDate(Calendar date, Calendar date1) { return getDiffDate(date.getTime(), date1.getTime()); } /** * �������/��� * * @param intervals * @param format * @return */ public static String getDiffDate(int intervals, String format) { Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, intervals); Date intervalDay = cal.getTime(); return formatDate(intervalDay, format); } /** * �������/��� * * @param calendar * @param offset * @return */ public static Calendar getDiffDate(Calendar calendar, int offset) { calendar.set(Calendar.DAY_OF_YEAR, (calendar.get(Calendar.DAY_OF_YEAR) + offset)); return calendar; } /** * �������/��� * * @param intervals * @return */ public static Date getDiffDate(Date date, int offset) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.DAY_OF_YEAR, (calendar.get(Calendar.DAY_OF_YEAR) + offset)); return calendar.getTime(); } /** * �������/��� * * @param intervals * @return */ public static Date getDiffDate(int intervals) { Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, intervals); return cal.getTime(); } /** * �����һ������ * * @param date * @return */ public static Date getMonday(Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); return c.getTime(); } /** * ������������ * * @param date * @return */ public static String getFriday(Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); c.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY); return new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); } /** * �ж����������Ƿ���ͬһ�� * * @param date1 * @param date2 * @return */ static boolean isSameWeekDates(Date date1, Date date2) { long diff = getMonday(date1).getTime() - getMonday(date2).getTime(); if (Math.abs(diff) < 1000 * 60 * 60 * 24) { return true; } else { return false; } } /** * �ж����������Ƿ���ͬһ�� * * @param date1 * @param date2 * @return */ boolean isSameWeekDates2(Date date1, Date date2) { Calendar cal1 = Calendar.getInstance(); Calendar cal2 = Calendar.getInstance(); cal1.setTime(date1); cal2.setTime(date2); int subYear = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR); if (0 == subYear) { if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR)) return true; } else if (1 == subYear && 11 == cal2.get(Calendar.MONTH)) { // ���12�µ����һ�ܺ�������һ�ܵĻ������һ�ܼ���������ĵ�һ�� if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR)) return true; } else if (-1 == subYear && 11 == cal1.get(Calendar.MONTH)) { if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR)) return true; } return false; } /** * ������ * * @param d1 * @param d2 * @param freeDays * @return */ public static int getWorkDay(Date d1, Date d2, int[] freeDays) { int dNum = 0; dNum = (int) ((d2.getTime() - d1.getTime()) / 1000 / 60 / 60 / 24) + 1; return dNum - getFreeDay(d1, dNum, freeDays); } /** * ��Ϣ�� * * @param date * @param dNum * @param freeDays * @return */ public static int getFreeDay(Date date, int dNum, int[] freeDays) { Calendar cal = Calendar.getInstance(); cal.setTime(date); int start = cal.get(Calendar.DAY_OF_WEEK) - 1; int freeNum = 0; for (int i = 0; i < dNum; i++) { for (int j = 0; j < freeDays.length; j++) { if ((start + i) % 7 == freeDays[j]) { freeNum++; } } } return freeNum; } /** * ������ * * @param d1 * @param d2 * @return */ public static int getWorkDay(Date d1, Date d2) { int[] freeDays = { 0, 6 };//default: Sunday and Saturday are the free days. return getWorkDay(d1, d2, freeDays); } /** * ��Ϣ�� * * @param date * @param dNum * @return */ public static int getFreeDay(Date date, int dNum) { int[] freeDays = { 0, 6 };//default: Sunday and Saturday are the free days. return getFreeDay(date, dNum, freeDays); } /** * ���������� * * @return */ public static String getSeqWeek() { Calendar c = Calendar.getInstance(Locale.CHINA); String week = Integer.toString(c.get(Calendar.WEEK_OF_YEAR)); if (week.length() == 1) week = "0" + week; String year = Integer.toString(c.get(Calendar.YEAR)); return year + week; } /** * ������� * * @param date * @return */ public static int getYear(java.util.Date date) { java.util.Calendar c = java.util.Calendar.getInstance(); c.setTime(date); return c.get(java.util.Calendar.YEAR); } /** * �����·� * * @param date * @return */ public static int getMonth(java.util.Date date) { java.util.Calendar c = java.util.Calendar.getInstance(); c.setTime(date); return c.get(java.util.Calendar.MONTH) + 1; } /** * �����շ� * * @param date * @return */ public static int getDay(java.util.Date date) { java.util.Calendar c = java.util.Calendar.getInstance(); c.setTime(date); return c.get(java.util.Calendar.DAY_OF_MONTH); } /** * ����Сʱ * * @param date * @return */ public static int getHour(java.util.Date date) { java.util.Calendar c = java.util.Calendar.getInstance(); c.setTime(date); return c.get(java.util.Calendar.HOUR_OF_DAY); } /** * ���ط��� * * @param date * @return */ public static int getMinute(java.util.Date date) { java.util.Calendar c = java.util.Calendar.getInstance(); c.setTime(date); return c.get(java.util.Calendar.MINUTE); } /** * �������� * * @param date * @return */ public static int getSecond(java.util.Date date) { java.util.Calendar c = java.util.Calendar.getInstance(); c.setTime(date); return c.get(java.util.Calendar.SECOND); } /** * ���غ��� * * @param date * @return */ public static long getMillis(java.util.Date date) { java.util.Calendar c = java.util.Calendar.getInstance(); c.setTime(date); return c.getTimeInMillis(); } /** * ����java.sql.Date * * @param date * @return */ public static java.sql.Date parseSqlDate(Date date) { if (date != null) return new java.sql.Date(date.getTime()); else return null; } /** * ����java.sql.Date * * @param dateStr * @param format * @return */ public static java.sql.Date parseSqlDate(String dateStr, String format) { java.util.Date date = parseDate(dateStr, format); return parseSqlDate(date); } /** * ����java.sql.Date * * @param dateStr * @return */ public static java.sql.Date parseSqlDate(String dateStr) { return parseSqlDate(dateStr, "yyyy/MM/dd"); } }