package com.goafanti.common.utils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class DateUtils extends org.apache.commons.lang3.time.DateUtils { public static final String YEAR_SPAN = "yearSpan"; public static final String QUARTER_SPAN = "quarterSpan"; public static final String MONTH_SPAN = "monthSpan"; public static final String WEEK_SPAN = "weekSpan"; public static final String DAY_SPAN = "daySpan"; /** * Determines how two dates compare up to no more than the specified most * significant field. * * @param date1 * the first date, not null * @param date2 * the second date, not null * @param field * the field from Calendar * @return diff millis * @throws IllegalArgumentException * if any argument is null * @see #truncate(Calendar, int) * @see #truncatedCompareTo(Date, Date, int) * @since 3.0 */ public static long truncatedDiffTo(final Date date1, final Date date2, final int field) { final Date truncatedDate1 = truncate(date1, field); final Date truncatedDate2 = truncate(date2, field); long thisTime = truncatedDate1.getTime(); long anotherTime = truncatedDate2.getTime(); return Math.abs(thisTime - anotherTime); } /** * Determines how two dates compare up to no more than the specified most * significant field. * * @param date1 * the first date, not null * @param date2 * the second date, not null * @param field * the field from Calendar * @return diff millis * @throws IllegalArgumentException * if any argument is null * @see #truncate(Calendar, int) * @see #truncatedCompareTo(Date, Date, int) * @since 3.0 */ public static long truncatedHourDiffTo(final Date date1, final Date date2) { return truncatedDiffTo(date1, date2, Calendar.HOUR) / 3600000; } /** * Determines how two dates compare up to no more than the specified most * significant field. * * @param date1 * the first date, not null * @param date2 * the second date, not null * @param field * the field from Calendar * @return diff millis * @throws IllegalArgumentException * if any argument is null * @see #truncate(Calendar, int) * @see #truncatedCompareTo(Date, Date, int) * @since 3.0 */ public static long truncatedMinuteDiffTo(final Date date1, final Date date2) { return truncatedDiffTo(date1, date2, Calendar.MINUTE) / 60000; } /** * 得到某年某周的第一天 * * @param year * @param week * @return */ public static Date getFirstDayOfWeek(int year, int week) { week = week - 1; Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, year); calendar.set(Calendar.MONTH, Calendar.JANUARY); calendar.set(Calendar.DATE, 1); Calendar cal = (Calendar) calendar.clone(); cal.add(Calendar.DATE, week * 7); return getFirstDayOfWeek(cal.getTime()); } /** * 得到某年某周的最后一天 * * @param year * @param week * @return */ public static Date getLastDayOfWeek(int year, int week) { week = week - 1; Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, year); calendar.set(Calendar.MONTH, Calendar.JANUARY); calendar.set(Calendar.DATE, 1); Calendar cal = (Calendar) calendar.clone(); cal.add(Calendar.DATE, week * 7); return getLastDayOfWeek(cal.getTime()); } /** * 取得当前日期所在周的第一天 * * @param date * @return */ public static Date getFirstDayOfWeek(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setFirstDayOfWeek(Calendar.SUNDAY); calendar.setTime(date); calendar.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek()); // Sunday setMidnight(calendar); return calendar.getTime(); } /** * 取得当前日期所在周的最后一天 * * @param date * @return */ public static Date getLastDayOfWeek(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setFirstDayOfWeek(Calendar.SUNDAY); calendar.setTime(date); calendar.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek() + 6); // Saturday setMidnight(calendar); return calendar.getTime(); } /** * 取得当前日期所在周的前一周最后一天 * * @param date * @return */ public static Date getLastDayOfLastWeek(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return getLastDayOfWeek(calendar.get(Calendar.YEAR), calendar.get(Calendar.WEEK_OF_YEAR) - 1); } /** * 返回指定日期的月的第一天 * * @param year * @param month * @return */ public static Date getFirstDayOfMonth(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), 1); setMidnight(calendar); return calendar.getTime(); } /** * 返回指定年月的月的第一天 * * @param year * @param month * @return */ public static Date getFirstDayOfMonth(Integer year, Integer month) { Calendar calendar = Calendar.getInstance(); if (year == null) { year = calendar.get(Calendar.YEAR); } if (month == null) { month = calendar.get(Calendar.MONTH); } calendar.set(year, month, 1); setMidnight(calendar); return calendar.getTime(); } /** * 返回指定日期的月的最后一天 * * @param year * @param month * @return */ public static Date getLastDayOfMonth(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), 1); calendar.roll(Calendar.DATE, -1); setMidnight(calendar); return calendar.getTime(); } /** * 返回指定年月的月的最后一天 * * @param year * @param month * @return */ public static Date getLastDayOfMonth(Integer year, Integer month) { Calendar calendar = Calendar.getInstance(); if (year == null) { year = calendar.get(Calendar.YEAR); } if (month == null) { month = calendar.get(Calendar.MONTH); } calendar.set(year, month, 1); calendar.roll(Calendar.DATE, -1); setMidnight(calendar); return calendar.getTime(); } /** * 返回指定日期的上个月的最后一天 * * @param year * @param month * @return */ public static Date getLastDayOfLastMonth(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH) - 1, 1); calendar.roll(Calendar.DATE, -1); setMidnight(calendar); return calendar.getTime(); } /** * 返回指定日期的季的第一天 * * @param year * @param quarter * @return */ public static Date getFirstDayOfQuarter(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return getFirstDayOfQuarter(calendar.get(Calendar.YEAR), getQuarterOfYear(date)); } /** * 返回指定年季的季的第一天 * * @param year * @param quarter * @return */ public static Date getFirstDayOfQuarter(Integer year, Integer quarter) { Calendar calendar = Calendar.getInstance(); Integer month = new Integer(0); if (quarter == 1) { month = 1 - 1; } else if (quarter == 2) { month = 4 - 1; } else if (quarter == 3) { month = 7 - 1; } else if (quarter == 4) { month = 10 - 1; } else { month = calendar.get(Calendar.MONTH); } return getFirstDayOfMonth(year, month); } /** * 返回指定日期的季的最后一天 * * @param year * @param quarter * @return */ public static Date getLastDayOfQuarter(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return getLastDayOfQuarter(calendar.get(Calendar.YEAR), getQuarterOfYear(date)); } /** * 返回指定年季的季的最后一天 * * @param year * @param quarter * @return */ public static Date getLastDayOfQuarter(Integer year, Integer quarter) { Calendar calendar = Calendar.getInstance(); Integer month = new Integer(0); if (quarter == 1) { month = 3 - 1; } else if (quarter == 2) { month = 6 - 1; } else if (quarter == 3) { month = 9 - 1; } else if (quarter == 4) { month = 12 - 1; } else { month = calendar.get(Calendar.MONTH); } return getLastDayOfMonth(year, month); } /** * 返回指定日期的上一季的最后一天 * * @param year * @param quarter * @return */ public static Date getLastDayOfLastQuarter(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return getLastDayOfLastQuarter(calendar.get(Calendar.YEAR), getQuarterOfYear(date)); } /** * 返回指定年季的上一季的最后一天 * * @param year * @param quarter * @return */ public static Date getLastDayOfLastQuarter(Integer year, Integer quarter) { Calendar calendar = Calendar.getInstance(); Integer month = new Integer(0); if (quarter == 1) { month = 12 - 1; } else if (quarter == 2) { month = 3 - 1; } else if (quarter == 3) { month = 6 - 1; } else if (quarter == 4) { month = 9 - 1; } else { month = calendar.get(Calendar.MONTH); } return getLastDayOfMonth(year, month); } /** * 返回指定日期的季度 * * @param date * @return */ public static int getQuarterOfYear(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.MONTH) / 3 + 1; } /** * 返回昨天日期 * @return date */ public static Date getYesterday() { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DATE, -1); setMidnight(calendar); return calendar.getTime(); } /** * 返回前一年最后一天 * @param date * @return */ public static Date getLastDayOfLastYear(Date date) { Calendar calendar = Calendar.getInstance(); return getLastDayOfYear(calendar.get(Calendar.YEAR) - 1); } /** * 返回指定年的最后一天 * @param year * @return */ public static Date getLastDayOfYear(int year) { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, year - 1); calendar.roll(Calendar.DAY_OF_YEAR, -1); setMidnight(calendar); return calendar.getTime(); } /** * 格式化时间 * @param date * @param pattern * @return */ public static String formatDate(Date date, String pattern) { SimpleDateFormat format = new SimpleDateFormat(pattern); return format.format(date); } /** * 解析日期 * @param source * @param pattern * @return * @throws ParseException */ public static Date parseDate(String source, String pattern) throws ParseException { SimpleDateFormat format = new SimpleDateFormat(pattern); return format.parse(source); } /** * 时分秒毫秒归零 * @param c * @return */ public static Calendar setMidnight(Calendar c) { c.set(Calendar.HOUR_OF_DAY, 0); c.set(Calendar.MINUTE, 0); c.set(Calendar.SECOND, 0); c.set(Calendar.MILLISECOND, 0); return c; } /** * 时分秒毫秒归零 * @param c * @return */ public static Date getEarlyToday() { Calendar c = Calendar.getInstance(); setMidnight(c); return c.getTime(); } /** * 字符串转日期 * @param date * @param ymd * @return * @throws ParseException */ public static Date StringToDate(String date,String ymd) throws ParseException { SimpleDateFormat dateFormat=new SimpleDateFormat(ymd); Date parse = dateFormat.parse(date); return parse; } }