java DateUtils日期时间工具类
主要包含如下功能:
1、日期时间格式转换、
2、日期时间比较
3、向指定日期的前后,加减 n年、n月、n天、n小时、n分钟、n秒钟
4、日期时间对象与日期时间字符串互转
更多功能详见代码:
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.TimeZone;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;public class DateUtils {private static Log logger = LogFactory.getLog(DateUtils.class);public static final String YYYY_MM = "yyyy-MM";public static final String YYYY_MM_DD = "yyyy-MM-dd";public static final String YYYY_MM_DD_HH = "yyyy-MM-dd HH";public static final String YYYY_MM_DD_HH_MM = "yyyy-MM-dd HH:mm";public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";public static final String YYYY_MM_DD_HH_MM_SS_SSS = "yyyy-MM-dd HH:mm:ss.SSS";public static final String YYYYMMDD = "yyyyMMdd";public static final String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";public static final String YYMM = "yyMM";public static final String HH_MM_SS = "HH:mm:ss";public static final String YYYY年MM月 = "yyyy年MM月";public static final String DAY_LAST_TIME = "23:59:59";public static final String DAY_FIRST_TIME = "00:00:00";public static final int ONE_DAY_SECONDS = 86400;public static final int ONE_HOUR_SECONDS = 3600;public static final int ONE_MINUTE_SECONDS = 60;private static final int[] MONTH_DAYS = new int[]{29, 30};private static final int[][] DAYS_MONTH = new int[][]{{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};private static final int[][] DATAS = new int[][]{{23, 3, 2, 17, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0}, {41, 0, 4, 23, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1}, {30, 7, 5, 28, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1}, {49, 0, 6, 33, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1}, {38, 0, 0, 38, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1}, {26, 6, 2, 44, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0}, {45, 0, 3, 49, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0}, {35, 0, 4, 54, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1}, {24, 4, 5, 59, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1}, {43, 0, 0, 5, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1}, {32, 0, 1, 10, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1}, {21, 2, 2, 15, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1}, {40, 0, 3, 20, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1}, {28, 7, 5, 26, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1}, {47, 0, 6, 31, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1}, {36, 0, 0, 36, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0}, {26, 5, 1, 41, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1}, {44, 0, 3, 47, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1}, {33, 0, 4, 52, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0}, {23, 3, 5, 57, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1}, {42, 0, 6, 2, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1}, {30, 8, 1, 8, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0}, {48, 0, 2, 13, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0}, {38, 0, 3, 18, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1}, {27, 6, 4, 23, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0}, {45, 0, 6, 29, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0}, {35, 0, 0, 34, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1}, {24, 4, 1, 39, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0}, {43, 0, 2, 44, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0}, {32, 0, 4, 50, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1}, {20, 3, 5, 55, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0}, {39, 0, 6, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0}, {29, 7, 0, 5, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1}, {47, 0, 2, 11, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1}, {36, 0, 3, 16, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0}, {26, 5, 4, 21, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1}, {45, 0, 5, 26, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1}, {33, 0, 0, 32, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1}, {22, 4, 1, 37, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1}, {41, 0, 2, 42, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1}, {30, 8, 3, 47, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1}, {48, 0, 5, 53, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1}, {37, 0, 6, 58, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1}, {27, 6, 0, 3, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0}, {46, 0, 1, 8, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0}, {35, 0, 3, 14, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1}, {24, 4, 4, 19, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1}, {43, 0, 5, 24, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1}, {32, 10, 6, 29, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1}, {50, 0, 1, 35, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0}, {39, 0, 2, 40, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1}, {28, 6, 3, 45, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0}, {47, 0, 4, 50, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1}, {36, 0, 6, 56, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0}, {26, 5, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1}, {45, 0, 1, 6, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0}, {34, 0, 2, 11, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0}, {22, 3, 4, 17, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0}, {40, 0, 5, 22, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0}, {30, 8, 6, 27, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1}, {49, 0, 0, 32, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1}, {37, 0, 2, 38, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1}, {27, 5, 3, 43, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1}, {46, 0, 4, 48, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1}, {35, 0, 5, 53, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1}, {23, 4, 0, 59, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1}, {42, 0, 1, 4, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1}, {31, 0, 2, 9, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0}, {21, 2, 3, 14, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1}, {39, 0, 5, 20, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1}, {28, 7, 6, 25, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1}, {48, 0, 0, 30, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1}, {37, 0, 1, 35, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1}, {25, 5, 3, 41, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1}, {44, 0, 4, 46, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1}, {33, 0, 5, 51, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1}, {22, 4, 6, 56, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0}, {40, 0, 1, 2, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0}, {30, 9, 2, 7, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1}, {49, 0, 3, 12, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1}, {38, 0, 4, 17, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0}, {27, 6, 6, 23, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1}, {46, 0, 0, 28, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0}, {35, 0, 1, 33, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0}, {24, 4, 2, 38, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1}, {42, 0, 4, 44, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1}, {31, 0, 5, 49, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0}, {21, 2, 6, 54, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1}, {40, 0, 0, 59, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1}, {28, 6, 2, 5, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0}, {47, 0, 3, 10, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1}, {36, 0, 4, 15, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1}, {25, 5, 5, 20, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0}, {43, 0, 0, 26, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1}, {32, 0, 1, 31, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0}, {22, 3, 2, 36, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0}};public DateUtils() {}public static Date getGregorianCalendar(String date) {Calendar c = getCalendar(date);int year = c.get(1);int month = c.get(2) + 1;int day = c.get(5);int index = year - 1936;int endIndex = month;if (DATAS[index][1] != 0 && month > DATAS[index][1]) {endIndex = month + 1;}int dayNum = 0;for(int i = 0; i < endIndex - 1; ++i) {dayNum += MONTH_DAYS[DATAS[index][4 + i]];}dayNum += day;dayNum += DATAS[index][0];int year_days = 365;if (isLeapYear(year)) {year_days = 366;}if (dayNum > year_days) {++year;dayNum -= year_days;}month = 1;int[] dayOfMonth = DAYS_MONTH[0];if (isLeapYear(year)) {dayOfMonth = DAYS_MONTH[1];}int i;for(i = 0; i < 12; ++i) {dayNum -= dayOfMonth[i];if (dayNum <= 0) {break;}++month;}day = dayOfMonth[i] + dayNum;return getDate(year + "-" + month + "-" + day);}public static String formatPrettySecond(int second) {int days = second / 86400;int modSecond = second % 86400;int hours = modSecond / 3600;modSecond %= 3600;int minutes = modSecond / 60;modSecond %= 60;StringBuilder sb = new StringBuilder();if (days > 0) {sb.append(days).append("天");}if (hours > 0) {sb.append(hours).append("小时");}if (minutes > 0) {sb.append(minutes).append("分");}if (modSecond > 0) {sb.append(modSecond).append("秒");}return sb.toString();}public static String formatForDisplaySecond(int second) {int days = second / 86400;int modSecond = second % 86400;int hours = modSecond / 3600;modSecond %= 3600;int minutes = modSecond / 60;modSecond %= 60;StringBuilder sb = new StringBuilder();if (days > 0) {sb.append(days).append("天");if (hours > 0) {sb.append(hours).append("小时");}} else if (hours > 0) {sb.append(hours).append("小时");if (minutes > 0) {sb.append(minutes).append("分");}} else if (minutes > 0) {sb.append(minutes).append("分");if (modSecond > 0) {sb.append(modSecond).append("秒");}} else {sb.append(modSecond).append("秒");}return sb.toString();}public static Date getLunarCalendar(String date) {Calendar calendar = getCalendar(date);int year = calendar.get(1);int month = 1;if (year >= 1936 && year <= 2028) {int index = year - 1936;int l_days = DATAS[index][0];int day_year = calendar.get(6);int days;if (day_year >= l_days) {days = day_year - l_days;} else {--index;--year;Calendar c = getCalendar(year + "-12-31");days = c.get(6) + day_year - DATAS[index][0];}int i = 0;int day_num;for(day_num = 0; i < 13; ++i) {day_num += MONTH_DAYS[DATAS[index][i + 4]];if (day_num >= days) {break;}++month;}int day = MONTH_DAYS[DATAS[index][i + 4]] - (day_num - days);if (DATAS[index][1] != 0 && month > DATAS[index][1]) {--month;}return getDate(year + "-" + month + "-" + day);} else {return null;}}public static Date getDate(String date) {DateFormat format = new SimpleDateFormat("yyyy-MM-dd");Date dd = null;try {dd = format.parse(date);} catch (Exception var4) {var4.printStackTrace();}return dd;}public static boolean isLeapYear(int year) {if (year % 400 == 0) {return true;} else if (year % 100 == 0) {return false;} else {return year % 4 == 0;}}public static String format(Date date) {return format(date, "yyyy-MM-dd");}public static String format(Date date, String fmt) {if (date == null) {return "";} else {SimpleDateFormat sdf = new SimpleDateFormat(fmt);return sdf.format(date);}}public static Date parse(String dateStr) {String fmt = getFmtStr(dateStr);if (StrUtils.empty(fmt)) {return null;} else {try {SimpleDateFormat sdf = new SimpleDateFormat(fmt);return sdf.parse(dateStr);} catch (Exception var3) {logger.error("转换日期出错:" + var3.getMessage(), var3);return null;}}}public static Date parse(Integer time, Date def) {if (time == null) {return def;} else {Date date = new Date();date.setTime((long)time);return date;}}public static long toTime(Date d, long def) {return d == null ? def : d.getTime();}public static String getFmtStr(String dateStr) {if (StrUtils.isEmpty(dateStr)) {return "";} else {int len = dateStr.trim().length();if (len == 10) {return "yyyy-MM-dd";} else if (len == 19) {return "yyyy-MM-dd HH:mm:ss";} else if (len >= 21 && len <= 23) {return "yyyy-MM-dd HH:mm:ss.SSS";} else if (len == 7) {return "yyyy-MM";} else if (len == 8) {return "HH:mm:ss";} else if (len == 13) {return "yyyy-MM-dd HH";} else if (len == 14) {return "yyyyMMddHHmmss";} else {return len == 16 ? "yyyy-MM-dd HH:mm" : "";}}}public static Date addMonths(Date date, int month) {Calendar cal = getCalendar(date);cal.add(2, month);return cal.getTime();}public static Date addYears(Date date, int year) {Calendar cal = getCalendar(date);cal.add(1, year);return cal.getTime();}public static Date addDays(Date date, int day) {Calendar cal = getCalendar(date);cal.add(5, day);return cal.getTime();}public static Date addHour(Date date, int hour) {Calendar cal = getCalendar(date);cal.add(11, hour);return cal.getTime();}public static Date addMinute(Date date, int minute) {Calendar cal = getCalendar(date);cal.add(12, minute);return cal.getTime();}public static Date addSecond(Date date, int second) {Calendar cal = getCalendar(date);cal.add(13, second);return cal.getTime();}public static Calendar getCalendar(Date date) {Calendar calendar = Calendar.getInstance();if (date != null) {calendar.setTime(date);}return calendar;}public static Calendar getCalendar(String date) {Date d = parse(date);return getCalendar(d);}public static int getMaxDayOfLastMonth() {Date now = new Date();Date lastMonth = addMonths(now, -1);lastMonth = getMaxDateOfMonth(lastMonth);Calendar calendar = Calendar.getInstance();calendar.setTime(lastMonth);int maxDay = calendar.get(5);return maxDay;}public static int getYearOfLastMonth() {Calendar calendar = Calendar.getInstance();calendar.add(2, -1);int yearOfLastMonth = calendar.get(1);return yearOfLastMonth;}public static int getMonthOfLastMonth() {Calendar calendar = Calendar.getInstance();calendar.add(2, -1);int lastMonth = calendar.get(2) + 1;return lastMonth;}public static int getCurrentYear() {Calendar cal = Calendar.getInstance();int year = cal.get(1);return year;}public static int getCurrentMonth() {Calendar cal = Calendar.getInstance();int month = cal.get(2) + 1;return month;}public static int getCurrentDay() {Calendar cal = Calendar.getInstance();int day = cal.get(5);return day;}public static Date validateStartDate(Date startDate) {Date today = new Date();if (startDate.compareTo(today) == 1) {startDate = today;}return startDate;}public static Date notAfterNow(Date myDate) {Date today = new Date();if (myDate.after(today)) {myDate = today;}return myDate;}public static Date notAfterYesterday(Date myDate) {Date today = new Date();Date yesterday = addDays(today, -1);if (myDate.after(yesterday)) {myDate = yesterday;}return myDate;}public static Date notAfterLastMonth(Date myDate) {Date today = new Date();Date lastMonth = addMonths(today, -1);lastMonth = getMaxDateOfMonth(lastMonth);if (myDate.after(lastMonth)) {myDate = lastMonth;}return myDate;}public static Date notAfterLastYear(Date myDate) {Date today = new Date();Date lastYear = addYears(today, -1);lastYear = getMaxDateOfYear(lastYear);if (myDate.after(lastYear)) {myDate = lastYear;}return myDate;}public static Date notBefore(Date myDate, String basicStr) throws Exception {Date basicDate = parse(basicStr);if (myDate.before(basicDate)) {myDate = basicDate;}return myDate;}public static Date toDate(int year, int month, int day) {Calendar calendar = Calendar.getInstance();calendar.set(year, month, day);return calendar.getTime();}public static String StringPatternToPattern(String str, String pattern1, String pattern2) {Date dateTime = null;String productStr = "";try {if (str != null && !str.equals("")) {SimpleDateFormat formater = new SimpleDateFormat(pattern1);dateTime = formater.parse(str);SimpleDateFormat formater1 = new SimpleDateFormat(pattern2);productStr = formater1.format(dateTime);}} catch (Exception var7) {logger.error(var7);}return productStr;}public static Date now() {return new Date();}public static String nowStr() {return format(now(), "yyyy-MM-dd HH:mm:ss");}public static String nowStr(String fmt) {return format(now(), fmt);}public static Date getMinDateOfHour(Date date) {if (date == null) {return null;} else {Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.set(12, calendar.getActualMinimum(12));calendar.set(13, calendar.getActualMinimum(13));calendar.set(14, calendar.getActualMinimum(14));return calendar.getTime();}}public static Date getMinDateOfDay(Date date) {if (date == null) {return null;} else {Calendar calendar = Calendar.getInstance();calendar.setTime(getMinDateOfHour(date));calendar.set(11, calendar.getActualMinimum(11));return calendar.getTime();}}public static Date getMinDateOfYear(Date date) {if (date == null) {return null;} else {Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.set(6, calendar.getActualMinimum(6));calendar.set(11, calendar.getActualMinimum(11));calendar.set(12, calendar.getActualMinimum(12));calendar.set(13, calendar.getActualMinimum(13));calendar.set(14, calendar.getActualMinimum(14));return calendar.getTime();}}public static Date getMaxDateOfYear(Date date) {if (date == null) {return null;} else {Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.set(6, calendar.getActualMaximum(6));calendar.set(11, calendar.getActualMaximum(11));calendar.set(12, calendar.getActualMaximum(12));calendar.set(13, calendar.getActualMaximum(13));calendar.set(14, calendar.getActualMaximum(14));return calendar.getTime();}}public static Date getMinDateOfWeek(Date date, Locale locale) {if (date == null) {return null;} else {Calendar calendar = Calendar.getInstance();int day_of_week = calendar.get(7);calendar.setTime(date);calendar.set(7, calendar.getActualMinimum(7));calendar.set(11, calendar.getActualMinimum(11));calendar.set(12, calendar.getActualMinimum(12));calendar.set(13, calendar.getActualMinimum(13));calendar.set(14, calendar.getActualMinimum(14));if (locale == null) {locale = Locale.CHINESE;}Date tmpDate = calendar.getTime();if (Locale.CHINESE.getLanguage().equals(locale.getLanguage())) {if (day_of_week == 1) {tmpDate = addDays(tmpDate, -6);} else {tmpDate = addDays(tmpDate, 1);}}return tmpDate;}}public static Date getMaxDateOfWeek(Date date, Locale locale) {if (date == null) {return null;} else {Calendar calendar = Calendar.getInstance();int day_of_week = calendar.get(7);calendar.setTime(date);calendar.set(7, calendar.getActualMaximum(7));calendar.set(11, calendar.getActualMaximum(11));calendar.set(12, calendar.getActualMaximum(12));calendar.set(13, calendar.getActualMaximum(13));calendar.set(14, calendar.getActualMaximum(14));if (locale == null) {locale = Locale.CHINESE;}Date tmpDate = calendar.getTime();if (Locale.CHINESE.getLanguage().equals(locale.getLanguage())) {if (day_of_week == 1) {tmpDate = addDays(tmpDate, -6);} else {tmpDate = addDays(tmpDate, 1);}}return tmpDate;}}public static Date getMinDateOfMonth(Date date) {if (date == null) {return null;} else {Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.set(5, calendar.getActualMinimum(5));calendar.set(11, calendar.getActualMinimum(11));calendar.set(12, calendar.getActualMinimum(12));calendar.set(13, calendar.getActualMinimum(13));calendar.set(14, calendar.getActualMinimum(14));return calendar.getTime();}}public static Date getMaxDateOfMonth(Date date) {if (date == null) {return null;} else {Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.set(5, calendar.getActualMaximum(5));calendar.set(11, calendar.getActualMaximum(11));calendar.set(12, calendar.getActualMaximum(12));calendar.set(13, calendar.getActualMaximum(13));calendar.set(14, calendar.getActualMaximum(14));return calendar.getTime();}}public static Date getMaxDateOfDay(Date date) {if (date == null) {return null;} else {Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.set(11, calendar.getActualMaximum(11));calendar.set(12, calendar.getActualMaximum(12));calendar.set(13, calendar.getActualMaximum(13));calendar.set(14, calendar.getActualMaximum(14));return calendar.getTime();}}public static Date getMaxDateOfHour(Date date) {if (date == null) {return null;} else {Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.set(12, calendar.getActualMaximum(12));calendar.set(13, calendar.getActualMaximum(13));calendar.set(14, calendar.getActualMaximum(14));return calendar.getTime();}}public static int getIntervalSecond(Date startDate, Date endDate) {if (startDate != null && endDate != null) {if (startDate.after(endDate)) {Date tmp = endDate;endDate = startDate;startDate = tmp;}long timeNumber = -1L;long TIME = 1000L;try {timeNumber = (endDate.getTime() - startDate.getTime()) / TIME;} catch (Exception var7) {logger.error(var7);}return (int)timeNumber;} else {return -1;}}public static int getIntervalMinute(Date startDate, Date endDate) {if (startDate != null && endDate != null) {if (startDate.after(endDate)) {Date tmp = endDate;endDate = startDate;startDate = tmp;}long timeNumber = -1L;long TIME = 60000L;try {timeNumber = (endDate.getTime() - startDate.getTime()) / TIME;} catch (Exception var7) {logger.error(var7, var7);}return (int)timeNumber;} else {return -1;}}public static int getIntervalHour(Date startDate, Date endDate) {if (startDate != null && endDate != null) {if (startDate.after(endDate)) {Date tmp = endDate;endDate = startDate;startDate = tmp;}long timeNumber = -1L;long TIME = 3600000L;try {timeNumber = (endDate.getTime() - startDate.getTime()) / TIME;} catch (Exception var7) {var7.printStackTrace();}return (int)timeNumber;} else {return -1;}}public static int getIntervalDay(Date startDate, Date endDate) {if (startDate != null && endDate != null) {if (startDate.after(endDate)) {Date tmp = endDate;endDate = startDate;startDate = tmp;}long dayNumber = -1L;long DAY = 86400000L;try {dayNumber = (endDate.getTime() + 1000L - startDate.getTime()) / DAY;} catch (Exception var7) {logger.error(var7, var7);}return (int)dayNumber;} else {return -1;}}public static int getIntervalMonth(Date startDate, Date endDate) {int result = 0;try {if (startDate == null || endDate == null) {return -1;}if (startDate.after(endDate)) {Date tmp = endDate;endDate = startDate;startDate = tmp;}Calendar calendar = Calendar.getInstance();calendar.setTime(startDate);int monthS = calendar.get(2);int yearS = calendar.get(1);calendar.setTime(endDate);int monthE = calendar.get(2);int yearE = calendar.get(1);if (yearE - yearS == 0) {result = monthE - monthS;} else {result = (yearE - yearS - 1) * 12 + (12 - monthS) + monthE;}} catch (Exception var8) {logger.error(var8);}return result;}public static int getIntervalYear(Date startDate, Date endDate) {int result = 0;try {if (startDate == null || endDate == null) {return -1;}if (startDate.after(endDate)) {Date tmp = endDate;endDate = startDate;startDate = tmp;}Calendar calendar = Calendar.getInstance();calendar.setTime(startDate);int yearS = calendar.get(1);calendar.setTime(endDate);int yearE = calendar.get(1);result = yearE - yearS;} catch (Exception var6) {logger.error(var6);}return result;}public static int getAge(String birthday) {Date d = parse(birthday);if (d == null) {return 0;} else {int age = getIntervalYear(new Date(), d);return Math.abs(age);}}public static List<Date> splitDateByDay(Date startDate, Date endDate) {if (startDate != null && endDate != null) {List<Date> dateList = new ArrayList();dateList.add(startDate);int num = getIntervalDay(startDate, endDate);for(int i = 1; i <= num; ++i) {dateList.add(addDays(startDate, i));}return dateList;} else {return null;}}public static List<Date> splitDateByMonth(Date startDate, Date endDate) {List<Date> dateList = new ArrayList();if (startDate != null && endDate != null) {dateList.add(startDate);int num = getIntervalMonth(startDate, endDate);for(int i = 1; i <= num; ++i) {dateList.add(addMonths(startDate, i));}return dateList;} else {return dateList;}}public static List<Date> splitDateByYear(Date startDate, Date endDate) {List<Date> dateList = new ArrayList();if (startDate != null && endDate != null) {dateList.add(startDate);int num = getIntervalYear(startDate, endDate);for(int i = 1; i <= num; ++i) {dateList.add(addYears(startDate, i));}return dateList;} else {return dateList;}}public static List<Date> getCurrentQuarter() {List<Date> dateList = new ArrayList();Date date = new Date(System.currentTimeMillis());Calendar calendar = Calendar.getInstance();calendar.setTime(date);int month = calendar.get(2);dateList.add(1, calendar.getTime());if (month >= 0 && month <= 2) {calendar.set(2, 0);} else if (month >= 3 && month <= 5) {calendar.set(2, 3);} else if (month >= 6 && month <= 8) {calendar.set(2, 6);} else {calendar.set(2, 9);}calendar.set(5, 1);calendar.set(11, 0);calendar.set(12, 0);calendar.set(13, 0);dateList.add(0, calendar.getTime());return dateList;}public static List<Date> getLastQuarter() {List<Date> dateList = new ArrayList();Date date = new Date(System.currentTimeMillis());Calendar calendar = Calendar.getInstance();calendar.setTime(date);int month = calendar.get(2);if (month >= 0 && month <= 2) {calendar.add(1, -1);calendar.set(2, 9);} else if (month >= 3 && month <= 5) {calendar.set(2, 0);} else if (month >= 6 && month <= 8) {calendar.set(2, 3);} else {calendar.set(2, 6);}calendar.set(5, 1);calendar.set(11, 0);calendar.set(12, 0);calendar.set(13, 0);dateList.add(0, calendar.getTime());calendar.add(2, 3);calendar.add(5, -1);calendar.set(11, 23);calendar.set(12, 59);calendar.set(13, 59);dateList.add(1, calendar.getTime());return dateList;}public static Date max(Date date1, Date date2) {if (date1 == null && date2 == null) {return null;} else if (date1 == null) {return date2;} else if (date2 == null) {return date1;} else {return date1.after(date2) ? date1 : date2;}}public static Date ceil(Date date1, Date date2) {if (date1 == null && date2 == null) {return null;} else if (date1 == null) {return date2;} else if (date2 == null) {return date1;} else {return date1.after(date2) ? date2 : date1;}}public static Date floor(Date date1, Date date2) {if (date1 == null && date2 == null) {return null;} else if (date1 == null) {return date2;} else if (date2 == null) {return date1;} else {return date1.after(date2) ? date1 : date2;}}public static Date min(Date date1, Date date2) {if (date1 == null && date2 == null) {return null;} else if (date1 == null) {return date2;} else if (date2 == null) {return date1;} else {return date1.after(date2) ? date2 : date1;}}public static boolean isMaxDayOfDay(Date date1, String precision) {if (date1 == null) {return false;} else {Date date2 = getMaxDateOfDay(date1);int diffNum = 0;if ("HH".equals(precision)) {diffNum = getIntervalHour(date1, date2);} else if ("mm".equals(precision)) {diffNum = getIntervalMinute(date1, date2);} else {diffNum = getIntervalSecond(date1, date2);}return diffNum == 0;}}public static boolean isMinDayOfDay(Date date1, String precision) {if (date1 == null) {return false;} else {Date date2 = getMinDateOfDay(date1);int diffNum = 0;if ("HH".equals(precision)) {diffNum = getIntervalHour(date1, date2);} else if ("mm".equals(precision)) {diffNum = getIntervalMinute(date1, date2);} else {diffNum = getIntervalSecond(date1, date2);}return diffNum == 0;}}public static boolean isMaxDayOfDay(Date date1) {if (date1 == null) {return false;} else {Date date2 = getMaxDateOfDay(date1);int secondNum = getIntervalSecond(date1, date2);return secondNum == 0;}}public static boolean isMinDayOfDay(Date date1) {if (date1 == null) {return false;} else {Date date2 = getMinDateOfDay(date1);int secondNum = getIntervalSecond(date1, date2);return secondNum == 0;}}public static boolean isMaxDayOfMonth(Date date1) {if (date1 == null) {return false;} else {Date date2 = getMaxDateOfMonth(date1);int secondNum = getIntervalSecond(date1, date2);return secondNum == 0;}}public static boolean isMinDayOfMonth(Date date1) {if (date1 == null) {return false;} else {Date date2 = getMinDateOfMonth(date1);int secondNum = getIntervalSecond(date1, date2);return secondNum == 0;}}public static boolean isTheSameDay(Date startDate, Date endDate) {String startDateStr = format(startDate);String endDateStr = format(endDate);return startDateStr.equals(endDateStr);}public static Date getLastMaxDay(Date startDate) {if (startDate == null) {return null;} else {startDate = addDays(startDate, -1);return getMaxDateOfDay(startDate);}}public static String getDifferentStr(String startStr, String endStr) {String dateRangeStr = "";if (startStr.equals(endStr)) {dateRangeStr = startStr;} else {dateRangeStr = startStr + "-" + endStr;}return dateRangeStr;}public static String getNextDay(String date, int num) {Date d = parse(date);Calendar ca = Calendar.getInstance();ca.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));ca.setTime(d);int day = ca.get(5);day += num;ca.set(5, day);return format(ca.getTime());}public static Date getNextMonthDay(Date startDate) {Date monthEndDate = getMaxDateOfMonth(startDate);Date nextMonth = addMonths(startDate, 1);nextMonth = parse(format(startDate) + " " + "23:59:59");if (isTheSameDay(startDate, monthEndDate)) {nextMonth = getMaxDateOfMonth(nextMonth);}return nextMonth;}public static void main(String[] args) {}}