首页>代码>java日期操作工具类>/930019556410368.java
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();
	}
}
最近下载更多
兴安盟叶修  LV4 2019年3月1日
glwnihao  LV14 2018年8月21日
geekLeven  LV2 2013年5月29日
最代码官方  LV168 2012年8月22日
最近浏览更多
momomo2  LV9 2021年1月29日
breakCY  LV15 2020年5月8日
千千千千千千  LV1 2020年4月13日
sumDDD  LV12 2020年3月17日
wei112233  LV15 2020年2月2日
lelelada  LV8 2019年12月11日
tanglitao  LV6 2019年5月20日
猴哥猴哥  LV12 2019年4月27日
兴安盟叶修  LV4 2019年3月1日
kinggode  LV14 2018年11月1日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友