DateUtils

来源:互联网 发布:android 视频通话 源码 编辑:程序博客网 时间:2024/05/20 11:49
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 (StringUtils.isNotBlank(str)) {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);return sdf.format(date);}/** * 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 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 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 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 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 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 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();}/** * 计算两个日期之间差的多少毫秒,如果日期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();}}

0 0