package com.accphr.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * 日期工具类 * */ public final class DateUtils { private DateUtils() { } /** * 转换指定格式的字符串为时间 * * @param str * @param format * @return */ public static Date formatStr2Date(String str, String pattern) { Date d = null; if (null != str && !str.trim().equals("")) { SimpleDateFormat sdf = new SimpleDateFormat(pattern); try { d = sdf.parse(str); } catch (ParseException e) { throw new RuntimeException(e); } } return d; } /** * 转换时间为指定格式的字符串 * * @param date * @return */ public static String formatDate2Str(Date date, String pattern) { if (null == date) { return null; } SimpleDateFormat sdf = new SimpleDateFormat(pattern); String s = sdf.format(date); return s; } /** * Calendar转换为Date * * @param calendar * @return */ public static Date calendar2Date(Calendar calendar) { if (null == calendar) { return null; } return calendar.getTime(); } /** * Date转换为Calendar * * @param date * @return */ public static Calendar date2Calendar(Date date) { if (null == date) { return null; } Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar; } /** * 计算指定日期是该年中的第几周 * * @param date * @return */ public static Integer getWeekOfYear(Date date) { if (null == date) { return 0; } return date2Calendar(date).get(Calendar.WEEK_OF_YEAR); } /** * 计算指定日期是该年中的第几天 * * @param date * @return */ public static Integer getDayOfYear(Date date) { if (null == date) { return 0; } return date2Calendar(date).get(Calendar.DAY_OF_YEAR); } /** * 计算指定日期是该月中的第几天 * * @param date * @return */ public static Integer getDayOfMonth(Date date) { if (null == date) { return 0; } return date2Calendar(date).get(Calendar.DAY_OF_MONTH); } /** * 计算指定日期是月中的第几个星期 * * @param date * @return */ public static Integer getDayOfWeekInMonth(Date date) { if (null == date) { return 0; } return date2Calendar(date).get(Calendar.DAY_OF_WEEK_IN_MONTH); } /** * 计算指定日期是该周中的第几天(星期天1~~~星期六7) * * @param date * @return */ public static Integer getDayOfWeek(Date date) { if (null == date) { return 0; } return date2Calendar(date).get(Calendar.DAY_OF_WEEK); } /** * 计算指定日期月份的最大天数 * * @param date * @return */ public static int getMaxDayInMonth(Date date) { if (date == null) { return 0; } return date2Calendar(date).getActualMaximum(Calendar.DAY_OF_MONTH); } /** * 给指定日期添加或减去指定年 * * @param date * @param amount * @return */ public static Date addYear(Date date, int amount) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.YEAR, amount); return calendar.getTime(); } /** * 指定日期的年份 * * @param date * @param year * @return */ public static Date setYear(Date date, int year) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.YEAR, year); return calendar.getTime(); } /** * 给指定日期添加或减去指定月 * * @param date * @param amount * @return */ public static Date addMonth(Date date, int amount) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.MONTH, amount); return calendar.getTime(); } /** * 指定日期月份 * * @param date * @param month * @return */ public static Date setMonth(Date date, int month) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.MONTH, month); return calendar.getTime(); } /** * 给指定日期添加或减去指定周 * * @param date * @param amount * @return */ public static Date addWeek(Date date, int amount) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.WEEK_OF_MONTH, amount); return calendar.getTime(); } /** * 给指定日期添加或减去指定天 * * @param date * @param amount * @return */ public static Date addDay(Date date, int amount) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DATE, amount); return calendar.getTime(); } /** * 指定日期的天数 * * @param date * @param day * @return */ public static Date setDay(Date date, int day) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.DATE, day); return calendar.getTime(); } /** * 给指定日期添加或减去指定小时 * * @param date * @param amount * @return */ public static Date addHour(Date date, int amount) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.HOUR_OF_DAY, amount); return calendar.getTime(); } /** * 指定日期的小时 * * @param date * @param hour * @return */ public static Date setHour(Date date, int hour) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.HOUR_OF_DAY, hour); return calendar.getTime(); } /** * 给指定日期添加或减去指定分钟 * * @param date * @param amount * @return */ public static Date addMinute(Date date, int amount) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.MINUTE, amount); return calendar.getTime(); } /** * 指定日期的分钟 * * @param date * @param minute * @return */ public static Date setMinute(Date date, int minute) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.MINUTE, minute); return calendar.getTime(); } /** * 给指定日期添加或减去指定秒 * * @param date * @param amount * @return */ public static Date addSecond(Date date, int amount) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.SECOND, amount); return calendar.getTime(); } /** * 指定日期的秒 * * @param date * @param second * @return */ public static Date setSecond(Date date, int second) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.SECOND, second); return calendar.getTime(); } /** * 给指定日期添加或减去指定毫秒 * * @param date * @param amount * @return */ public static Date addMillisecond(Date date, int amount) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.MILLISECOND, amount); return calendar.getTime(); } /** * 指定日期的毫秒 * * @param date * @param millisecond * @return */ public static Date setMillisecond(Date date, int millisecond) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.MILLISECOND, millisecond); return calendar.getTime(); } /** * 计算两个日期之间差的多少毫秒,如果日期firstDate在日期secondDate的后面则返回一个正数、如果日期firstDate在日期secondDate的前面则返回一个负数、两个日期相同返回0 * * @param firstDate * @param secondDate * @return */ public static long compareMillisecond(Date firstDate, Date secondDate) { long time1 = firstDate.getTime(); long time2 = secondDate.getTime(); return (time1 - time2); } /** * 计算两个日期之间差的多少秒,如果日期firstDate在日期secondDate的后面则返回一个正数、如果日期firstDate在日期secondDate的前面则返回一个负数、两个日期相同返回0 * * @param firstDate * @param secondDate * @return */ public static long compareSecond(Date firstDate, Date secondDate) { long time1 = firstDate.getTime(); long time2 = secondDate.getTime(); return Math.abs((time1 - time2) / (1000)); } /** * 计算两个日期之间差的多少分钟,如果日期firstDate在日期secondDate的后面则返回一个正数、如果日期firstDate在日期secondDate的前面则返回一个负数、两个日期相同返回0 * * @param firstDate * @param secondDate * @return */ public static long compareMinute(Date firstDate, Date secondDate) { long time1 = firstDate.getTime(); long time2 = secondDate.getTime(); return Math.abs((time1 - time2) / (1000 * 60)); } /** * 计算两个日期之间差的多少小时,如果日期firstDate在日期secondDate的后面则返回一个正数、如果日期firstDate在日期secondDate的前面则返回一个负数、两个日期相同返回0 * * @param firstDate * @param secondDate * @return */ public static long compareHour(Date firstDate, Date secondDate) { long time1 = firstDate.getTime(); long time2 = secondDate.getTime(); return Math.abs((time1 - time2) / (1000 * 60 * 60)); } /** * 计算两个日期之间差的多少天,如果日期firstDate在日期secondDate的后面则返回一个正数、如果日期firstDate在日期secondDate的前面则返回一个负数、两个日期相同返回0 * * @param firstDate * @param secondDate * @return */ public static long compareDay(Date firstDate, Date secondDate) { long time1 = firstDate.getTime(); long time2 = secondDate.getTime(); return Math.abs((time1 - time2) / (1000 * 60 * 60 * 24)); } // /** // * // 计算两个日期之间差的多少月,如果日期firstDate在日期secondDate的后面则返回一个正数、如果日期firstDate在日期secondDate的前面则返回一个负数、两个日期相同返回0 // * // * @param firstDate // * @param secondDate // * @return // */ // public static long compareMonth(Date start, Date end) { // // TODO // if (start.after(end)) { // Date t = start; // start = end; // end = t; // } // Calendar startCalendar = Calendar.getInstance(); // startCalendar.setTime(start); // Calendar endCalendar = Calendar.getInstance(); // endCalendar.setTime(end); // Calendar temp = Calendar.getInstance(); // temp.setTime(end); // temp.add(Calendar.DATE, 1); // // int year = endCalendar.get(Calendar.YEAR) // - startCalendar.get(Calendar.YEAR); // int month = endCalendar.get(Calendar.MONTH) // - startCalendar.get(Calendar.MONTH); // // if ((startCalendar.get(Calendar.DATE) == 1) // && (temp.get(Calendar.DATE) == 1)) { // return year * 12 + month + 1; // } else if ((startCalendar.get(Calendar.DATE) != 1) // && (temp.get(Calendar.DATE) == 1)) { // return year * 12 + month; // } else if ((startCalendar.get(Calendar.DATE) == 1) // && (temp.get(Calendar.DATE) != 1)) { // return year * 12 + month; // } else { // return (year * 12 + month - 1) < 0 ? 0 : (year * 12 + month); // } // } // /** // * // 计算两个日期之间差的多少年,如果日期firstDate在日期secondDate的后面则返回一个正数、如果日期firstDate在日期secondDate的前面则返回一个负数、两个日期相同返回0 // * // * @param firstDate // * @param secondDate // * @return // */ // public static long compareYear(Date start, Date end) { // // TODO // return 0; // } /** * 获取指定日期对应的年份的第一天的日期 * * @param date * @return */ public static Date getFirstDayOfYear(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.DAY_OF_YEAR, 1);// 设为日期为今年的第1天 return calendar.getTime(); } /** * 获取指定日期对应的年份的最后一天的日期 * * @param date * @return */ public static Date getLastDayOfYear(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.DAY_OF_YEAR, 1);// 设为日期为今年的第1天 calendar.add(Calendar.YEAR, 1);// 加上一年,到第二年的第一天 calendar.add(Calendar.DATE, -1);// 减一天,今年的最后一天 return calendar.getTime(); } /** * 获取指定日期对应的季度的第一天的日期 * * @param date * @return */ public static Date getFirstDayOfQuarter(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int month = calendar.get(Calendar.MONTH); if (0 == month || 1 == month || 2 == month) { calendar.set(Calendar.MONDAY, 0); } else if (3 == month || 4 == month || 5 == month) { calendar.set(Calendar.MONDAY, 3); } else if (6 == month || 7 == month || 8 == month) { calendar.set(Calendar.MONDAY, 6); } else { calendar.set(Calendar.MONDAY, 9); } return getFirstDayOfMonth(calendar.getTime()); } /** * 获取指定日期对应的季度的最后一天的日期 * * @param date * @return */ public static Date getLastDayOfQuarter(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int month = calendar.get(Calendar.MONTH); if (0 == month || 1 == month || 2 == month) { calendar.set(Calendar.MONDAY, 2); } else if (3 == month || 4 == month || 5 == month) { calendar.set(Calendar.MONDAY, 5); } else if (6 == month || 7 == month || 8 == month) { calendar.set(Calendar.MONDAY, 8); } else { calendar.set(Calendar.MONDAY, 11); } return getLastDayOfMonth(calendar.getTime()); } /** * 获取指定日期对应的月份的第一天的日期 * * @param date * @return */ public static Date getFirstDayOfMonth(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.DATE, 1);// 设为当前月的1号 return calendar.getTime(); } /** * 获取指定日期对应的月份的最后一天的日期 * * @param date * @return */ public static Date getLastDayOfMonth(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.DATE, 1);// 设为当前月的1号 calendar.add(Calendar.MONTH, 1);// 加一个月,变为下月的1号 calendar.add(Calendar.DATE, -1);// 减去一天,变为当月最后一天 return calendar.getTime(); } /** * 获取指定日期对应的周的第一天的日期(按中国习惯星期一作为一周的第一天) * * @param date * @return */ public static Date getFirstDayOfWeek(Date date) { int dayOfWeek = getDayOfWeek(date); if (2 == dayOfWeek) { return date; } Calendar calendar = Calendar.getInstance(); calendar.setTime(date); while (true) { calendar.add(Calendar.DATE, -1); if (2 == getDayOfWeek(calendar.getTime())) { break; } } return calendar.getTime(); } /** * 获取指定日期对应的周的最后一天的日期(按中国习惯星期天作为一周的最后一天) * * @param date * @return */ public static Date getLastDayOfWeek(Date date) { int dayOfWeek = getDayOfWeek(date); if (1 == dayOfWeek) { return date; } Calendar calendar = Calendar.getInstance(); calendar.setTime(date); while (true) { calendar.add(Calendar.DATE, 1); if (1 == getDayOfWeek(calendar.getTime())) { break; } } return calendar.getTime(); } }