Date工具类

本文详细介绍了一款Java日期时间处理工具类的功能和使用方法,包括日期格式化、日期计算、日期比较等实用功能,旨在帮助开发者高效地进行日期时间相关的编程任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


/************************ CHANGE REPORT HISTORY ******************************\
** Product VERSION,UPDATED BY,UPDATE DATE                                     *
*   DESCRIPTION OF CHANGE: modify(M),add(+),del(-)                             *
*-----------------------------------------------------------------------------*
* V1.0DEMO,xiaoran27,2016-3-23
* create 注释
*-----------------------------------------------------------------------------*
* V2.0.4 2018-1-22
* M RDM#8821 检查规范修正 by maxp
\*************************** END OF CHANGE REPORT HISTORY ********************/
package cn.lsmsp.daalsmsplog.util;


import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;


public class DateUtils {
	
	// 用于DateUtil--------------------------------------------------
	public final static String START_DATE = "1";
	public final static String END_DATE = "7";

	public static final String DateFormat = "yyyy-MM-dd";
	public static final String DateAndTimeFormat = "yyyy-MM-dd HH:mm:ss";
	public static final String DateAndTimeFormat1 = "yyyy-mm-dd hh:mm:ss";
	public static final String DateFormatChina = "yyyy 年 MM 月 dd 日";	
	public static final String DateFormatChina_YYYY_MM = "yyyy 年 MM 月";
	public static final String DateFormatChina_YYYY ="yyyy 年";
	public static final String MonthFormat="MM-dd";
	public static final String DayFormat="dd";
	public static final String DateTimeNoFormat="yyyyMMddHHmmss";
	
	public static final String timeNowPattern = "yyyy-MM-dd HH:mm:ss";
	public static final String timeBeginPattern = "yyyy-MM-dd 00:00:00";
	public static final String timeEndPattern = "yyyy-MM-dd 23:59:59";
	public static final String dateAndMinusPattern = "yyyy-MM-dd";
	public static final String dateNoMinusPattern = "yyyyMMdd";
	public static final String monthAndDateNoMinusPattern = "MMdd";
	public static final String yearPattern = "yyyy";
	public static final String DateFormat_YYYY_MM ="yyyy-MM";
	public static final String DateFormat_M ="M";
	public static final String DateFormat_d ="d";
	public static final String DateFormat_M_CHINA ="M月";
	
	private static Logger logger = LoggerFactory.getLogger(DateUtils.class);
	
	public static String getYear(){
		return new DateTime().toString(yearPattern);
	}
	
	public static String getMonthAndDateNoMinus(String time){
		return new DateTime(time).toString(monthAndDateNoMinusPattern);
	}
	
	public static String getNow(String pattern){
		return new DateTime().toString(pattern);
	}
	
	public static String getWeekBegin(int weeks, String pattern){
		return weeks == 0 ? new DateTime().dayOfWeek().withMinimumValue().toString(pattern) : new DateTime().plusWeeks(weeks).dayOfWeek().withMinimumValue().toString(pattern);
	}

	public static String getWeekEnd(int weeks, String pattern){
			return weeks == 0 ? new DateTime().dayOfWeek().withMaximumValue().toString(pattern) : new DateTime().plusWeeks(weeks).dayOfWeek().withMaximumValue().toString(pattern);
	}

	public static String getMonthBegin(int months, String pattern){
		return months == 0 ? new DateTime().dayOfMonth().withMinimumValue().toString(pattern) : new DateTime().plusMonths(months).dayOfMonth().withMinimumValue().toString(pattern);
	}

	public static String getMonthEnd(int months, String pattern){
		return months == 0 ? new DateTime().dayOfMonth().withMaximumValue().toString(pattern) : new DateTime().plusMonths(months).dayOfMonth().withMaximumValue().toString(pattern);
	}
	
	public static String getYearBegin(int years, String pattern){
		return years == 0? new DateTime().dayOfYear().withMinimumValue().toString(pattern) : new DateTime().plusYears(years).dayOfYear().withMinimumValue().toString(pattern);
	}

	public static String getYearEnd(int years, String pattern){
		return years == 0 ? new DateTime().dayOfYear().withMaximumValue().toString(pattern) : new DateTime().plusYears(years).dayOfYear().withMaximumValue().toString(pattern);
	}

	/** now methods **/
	public static String getNowDateAndMinus(){
		return getNow(dateAndMinusPattern);
	}
	public static String getNowDateNoMinus(){
		return getNow(dateNoMinusPattern);
	}
	public static String getNowTime(){
		return getNow(timeNowPattern);
	}
	
	public static String get3daysLaterTime(){
		return new DateTime().plusDays(2).toString(timeEndPattern);
	}
	
	
	/**	week methods **/
	public static String getWeekBeginDateAndMinus(int weeks){
		return getWeekBegin(weeks, dateAndMinusPattern);
	}
	public static String getWeekBeginDateNoMinus(int weeks){
		return getWeekBegin(weeks, dateNoMinusPattern);
	}
	public static String getWeekBeginTime(int weeks){
		return getWeekBegin(weeks, timeBeginPattern);
	}
	public static String getWeekEndDateAndMinus(int weeks){
		return getWeekEnd(weeks, dateAndMinusPattern);
	}
	public static String getWeekEndDateNoMinus(int weeks){
		return getWeekEnd(weeks, dateNoMinusPattern);
	}
	public static String getWeekEndTime(int weeks){
		return getWeekEnd(weeks, timeEndPattern);
	}

	/*** month methods **/
	public static String getMonthBeginDateAndMinus(int months){
		return getMonthBegin(months, dateAndMinusPattern);
	}
	public static String getMonthBeginDateNoMinus(int months){
		return getMonthBegin(months, dateNoMinusPattern);
	}
	public static String getMonthBeginTime(int months){
		return getMonthBegin(months, timeBeginPattern);
	}
	public static String getMonthEndDateAndMinus(int months){
		return getMonthEnd(months, dateAndMinusPattern);
	}
	public static String getMonthEndDateNoMinus(int months){
		return getMonthEnd(months, dateNoMinusPattern);
	}
	public static String getMonthEndTime(int months){
		return getMonthEnd(months, timeEndPattern);
	}

	/** year methods **/
	
	public static String getYearBeginDateAndMinus(int years){
		return getYearBegin(years, dateAndMinusPattern);
	}
	public static String getYearBeginDateNoMinus(int years){
		return getYearBegin(years, dateNoMinusPattern);
	}
	public static String getYearBeginTime(int years){
		return getYearBegin(years, timeBeginPattern);
	}
	public static String getYearEndDateAndMinus(int years){
		return getYearEnd(years, dateAndMinusPattern);
	}
	public static String getYearEndDateNoMinus(int years){
		return getYearEnd(years, dateNoMinusPattern);
	}
	public static String getYearEndTime(int years){
		return getYearEnd(years, timeEndPattern);
	}
	
	public static String getWeekBegin(String dateStr, String pattern){
		return new DateTime(dateStr).dayOfWeek().withMinimumValue().toString(pattern);
	}
	
	public static String getWeekEnd(String dateStr, String pattern){
		return new DateTime(dateStr).dayOfWeek().withMaximumValue().toString(pattern);
	}
	
	public static String getLastWeekBeginDate(String dateStr){
		return getWeekBegin(dateStr, dateAndMinusPattern);
	}
	
	public static String getLastWeekEndDate(String dateStr){
		return getWeekEnd(dateStr, dateAndMinusPattern);
	}
	public static String getLastWeekBeginTime(String dateStr){
		return getWeekBegin(dateStr, timeBeginPattern);
	}
	
	public static String getLastWeekEndTime(String dateStr){
		return getWeekEnd(dateStr, timeEndPattern);
	}

	public static String getLastWeekBeginDate(){
		return DateUtils.getWeekBeginDateAndMinus(-1);
	}
	public static String getLastWeekEndDate(){
		return DateUtils.getWeekEndDateAndMinus(-1);
	}
	public static String getLastWeekBeginTime(){
		
		return DateUtils.getWeekBeginTime(-1);
	}
	public static String getLastWeekEndTime(){
		return DateUtils.getWeekEndTime(-1);
	}
	
	public static String getLast30daysBeginDate(String dateStr){
		return new DateTime(dateStr).plusMonths(-1).toString(dateAndMinusPattern);
	}
	
	public static String getYesterdayDateNoMinus(){
		
		return new DateTime().plusDays(-1).toString(dateNoMinusPattern);
	}
	
	public static String getYesterdayDateAndMinus(){
		
		return new DateTime().plusDays(-1).toString(dateAndMinusPattern);
	}
	
	public static String getDateNoMinus(Date date){
		return new DateTime(date).toString(dateNoMinusPattern);
	}
	
	public static String getDateAndTime(Date date){
		return new DateTime(date).toString(timeNowPattern);
	}
	
	public static ArrayList<String> getDate(String starDate, String endDate){
		ArrayList<String> dates = new ArrayList<String>();
		String startDate = new DateTime(starDate).toString("yyyy-MM-dd");
		for(int i=0;;i++){
			String temp = new DateTime(endDate).minusDays(i).toString("yyyy-MM-dd");
			if(!dates.contains(temp)){
				dates.add(temp);
			}
			if(temp.equals(startDate)){
				break;
			}
		}
		return dates;
	}
	
	/**
	 * 根据年,月,日获取日期对象 
	 * @param year 年
	 * @param month 月
	 * @param day 日
	 * @return 日期对象 
	 */
	public static Date getTheDayOfMonth(int year, int month, int day) {
		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.YEAR, year);
		calendar.set(Calendar.MONTH, month - 1);
		calendar.set(Calendar.DATE, day);
		calendar.set(Calendar.HOUR, 0);
		calendar.set(Calendar.MINUTE, 0);
		calendar.set(Calendar.SECOND, 0);
		return getSqlDate(calendar.getTime());
	}
	/**
	 * 根据年,月,日,时,分,秒获取日期对象 
	 * @param year 年
	 * @param month 月
	 * @param day 日
	 * @param hour 时
	 * @param minute 分
	 * @param second 秒
	 * @return 日期对象 
	 */
	public static Date getTheTimeOfMonth(int year, int month, int day, int hour, int minute, int second) {
		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.YEAR, year);
		calendar.set(Calendar.MONTH, month - 1);
		calendar.set(Calendar.DATE, day);
		calendar.set(Calendar.HOUR, hour);
		calendar.set(Calendar.MINUTE, minute);
		calendar.set(Calendar.SECOND, second);
		return getSqlDate(calendar.getTime());
	}
	

	
	/**
	 * 将日期格式化为字符串,日期格式有参数format决定
	 * 
	 * @param date
	 *            日期
	 * @param format
	 *            日期格式
	 * @return 格式化后的字符串
	 */
	public static String formatAll(Date date, String format) {
		if (date == null) {
			return null;
		}
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		String ret = sdf.format(date);
		return ret;
	}

	/**
	 * 将日期格式化为(yyyy-MM-dd)格式的字符串
	 * 
	 * @param date
	 *            日期
	 * @return 格式化后的字符串
	 */
	public static String format(Date date) {
		if (date == null) {
			return "";
		} else {
			return formatAll(date, DateFormat);
		}
	}

	/**
	 * 将日期格式化为(yyyy-MM-dd HH:mm:ss)的字符串
	 * 
	 * @param date
	 *            日期
	 * @return 格式化后的字符串
	 */
	public static String formatDateAndTime(Date date) {
		return formatAll(date, DateAndTimeFormat);
	}

	/**
	 * 将日期类型格式化为(yyyy 年 mm 月 dd 日)的字符串
	 * 
	 * @param date
	 *            日期
	 * @return 格式化后的字符串
	 */
	public static String formatChina(Date date) {
		return formatAll(date, DateFormatChina);
	}

	/**
	 * 获取当前系统日期和时间,日期格式为(yyyy-MM-dd HH:mm:ss)
	 * 
	 * @return 当前系统日期和时间
	 */
	public static Date getSysDate() {
		Date sysDate = null;
		SimpleDateFormat a = new SimpleDateFormat(
				"yyyy-MM-dd HH:mm:ss");
		SimpleDateFormat b = new SimpleDateFormat(
				"yyyy-MM-dd HH:mm:ss");
		try {
			sysDate = b.parse(a.format(new Date()));
		} catch (ParseException ex) {
			ex.getMessage();
		}
		return sysDate;
	}

	/**
	 * 获取指定分钟的日期
	 * @param dateTime
	 * @param minute
	 * @return
	 */
	public static Date getCollectorForMinuteRange(Date dateTime, int minute,int second,int milliSecond) {
		//Calendar cd = Calendar.getInstance();
		Calendar cd = getUTCCalendar();
		cd.setTime(dateTime);
		cd.add(Calendar.MINUTE, minute);
		cd.set(Calendar.SECOND, second);
		cd.set(Calendar.MILLISECOND, milliSecond);
		return cd.getTime();
	}

	public static Calendar getUTCCalendar(){
		Calendar calendar = Calendar.getInstance();
		int zoneOffset = calendar.get(Calendar.ZONE_OFFSET);
		int dstOffset = calendar.get(Calendar.DST_OFFSET);
		calendar.add(Calendar.MILLISECOND, -(zoneOffset + dstOffset));
		return calendar;
	}


	/**
	 * 将字符串的日期转换成日期对象 日期格式由参数format指定
	 *
	 * @param stringDate
	 *            字符串日期
	 * @param format
	 *            日期格式
	 * @return 日期
	 */
	public static Date formatStringToDate(String stringDate, String format) {
		if ((stringDate == null) || stringDate.trim().equals("")) {
			return null;
		}
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		try {
			return sdf.parse(stringDate);
		} catch (ParseException ex) {
			ex.printStackTrace();
		}
		return null;
	}


	/**
	 * 将字符串的日期转换成日期对象,日期格式(yyyy-MM-dd)
	 *
	 * @param stringDate
	 *            字符串日期
	 * @return 日期对象
	 */
	public static Date formateStringToDate(String stringDate) {
		return formatStringToDate(stringDate, DateFormat);
	}
	public static Date formateStringToDate(String stringDate,String format) {
		return formatStringToDate(stringDate, format);
	}

	/**
	 * 根据原日期获取相对偏移N天的时间
	 *
	 * @param dateTime
	 *            原日期
	 * @param day
	 *            (向前移正数,向后移负数)
	 * @return Date
	 */
	public static Date getDateAddDay(Date dateTime, int day) {
		Calendar cald = Calendar.getInstance();
		cald.setTime(dateTime);
		cald.add(Calendar.DATE, day);
		return cald.getTime();
	}

	/**
	 * 根据原日期获取相对偏移N月的时间
	 *
	 * @param dateTime
	 *            原日期
	 * @param month
	 *            (向前移正数,向后移负数)
	 * @return Date
	 */
	public static Date getDateAddMonth(Date dateTime, int month) {
		Calendar cald = Calendar.getInstance();
		cald.setTime(dateTime);
		cald.add(Calendar.MONTH, month);
		return cald.getTime();
	}

	/**
	 * 根据原日期获取相对偏移N小时的时间
	 *
	 * @param dateTime
	 *            原日期
	 * @param hours
	 *            (向前移正数,向后移负数)
	 * @return Date
	 */
	public static Date getDateAddHour(Date dateTime, int hours) {
		Calendar ca = Calendar.getInstance();
		ca.setTime(dateTime);
		ca.add(Calendar.HOUR, hours);
		return ca.getTime();
	}

	/**
	 * 根据原日期获取相对偏移N分钟的时间
	 *
	 * @param dateTime
	 *            原日期
	 * @param minute
	 *            (向前移正数,向后移负数)
	 * @return Date
	 */
	public static Date getDateAddMinute(Date dateTime, int minute) {

		Calendar cd = Calendar.getInstance();

		cd.setTime(dateTime);

		cd.add(Calendar.MINUTE, minute);

		return cd.getTime();

	}

	/**
	 * 根据原日期获取相对偏移N秒的时间
	 *
	 * @param dateTime
	 *            原日期
	 * @param second
	 *            (向前移正数,向后移负数)
	 * @return Date
	 */
	public static Date getDateAddSecond(Date dateTime, int second) {

		Calendar cd = Calendar.getInstance();

		cd.setTime(dateTime);

		cd.add(Calendar.SECOND, second);

		return cd.getTime();

	}

	/**
	 * 根据原日期获取相对偏移N年的时间
	 *
	 * @param dateTime
	 *            原日期
	 * @param year
	 *            (向前移正数,向后移负数)
	 * @return Date
	 */
	public static Date getDateAddYear(Date dateTime, int year) {
		Calendar cald = Calendar.getInstance();
		cald.setTime(dateTime);
		cald.add(Calendar.YEAR, year);
		return cald.getTime();
	}

	/**
	 * 由java.util.Date到java.sql.Date的类型转换
	 *
	 * @param date
	 *            java.util.Date
	 * @return Date java.sql.Date
	 */
	public static Date getSqlDate(Date date) {
		return new Date(date.getTime());
	}

	/**
	 * 是否为闰年
	 * 
	 * @param year
	 * @return 布尔类型 true表示是闰年,false不是闰年
	 */
	public static boolean isLeapYear(int year) {
		return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
	}

	/**
	 * 获得某年某月最后一天的日期
	 * 
	 * @param year 某年
	 * @param month 某月
	 * @return Date
	 */
	public static Date getLastDayOfMonth(int year, int month) {
		int date = 0;
		if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8
				|| month == 10 || month == 12){
			
				date = 31;
			}
		if (month == 4 || month == 6 || month == 9 || month == 11)
			{
			date = 30;
			}
		if (month == 2) {
		   if (isLeapYear(year))
				{
				date = 29;
				}
			else
				{
				date = 28;
				}
		
		}
		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.YEAR, year);
		calendar.set(Calendar.MONTH, month-1);
		calendar.set(Calendar.DATE, date);
		calendar.set(Calendar.HOUR, 0);
		calendar.set(Calendar.MINUTE, 0);
		calendar.set(Calendar.SECOND, 0);
		return calendar.getTime();
	}

	/**
	 * 获得某一日期的最后一刻 
	 * @param curDate 某日期
	 * @return Date
	 */
	public static Date clearToMillSec(Date curDate) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(curDate);
		calendar.set(Calendar.AM_PM, Calendar.AM);
		calendar.set(Calendar.HOUR, 23);
		calendar.set(Calendar.MINUTE, 59);
		calendar.set(Calendar.SECOND, 59);
		calendar.set(Calendar.MILLISECOND, 0);
		return calendar.getTime();
	} 

	/**
	 * 两日期相差的天数 ,参数是日期类型
	 * 
	 * @param date1
	 *            作为减数的日期
	 * @param date2
	 *            作为被减数的日期
	 * @return
	 */
	public static Long getOffsetDay(Date date1, Date date2) {
		return Long.valueOf((date1.getTime() - date2.getTime())
				/ (1000 * 60 * 60 * 24));
	}
	/**
	 * 两日期相差的小时数
	 * 
	 * @param date1
	 *            作为减数的日期
	 * @param date2
	 *            作为被减数的日期
	 * @return
	 */
	public static Long getOffsetHour(Date date1, Date date2) {
		return Long.valueOf((date1.getTime() - date2.getTime())
				/ (1000 * 60 * 60));
	}
	
	public static Long getOffsetMinute(Date date1,Date date2){
		return Long.valueOf((date1.getTime() - date2.getTime())
				/ (1000 * 60));
	}

	/**
	 * 两日期相差的天数,参数时字符串类型
	 * 
	 * @param date1
	 *            作为减数的日期字符
	 * @param date2
	 *            作为被减数的日期字符
	 * @return 
	 */
	public static Long getOffsetDay(String dateStr1, String dateStr2) {
		Date date1 = formateStringToDate(dateStr1);
		Date date2 = formateStringToDate(dateStr2);
		return getOffsetDay(date1, date2);
	}

	/**
	 * 获取当天的开始时间
	 * @return
	 */
	public static Date getCurrentDayBegin() {

		Calendar cd = Calendar.getInstance();
		cd.set(Calendar.HOUR_OF_DAY, 0);
		cd.set(Calendar.MINUTE, 0);
		cd.set(Calendar.SECOND, 0);
		return cd.getTime();
	}
	 

	/**
	 * 获取当天的结束时间
	 * 
	 * @return
	 */
	public static Date getCurrentDayEnd() {

		Calendar cd = Calendar.getInstance();
		cd.set(Calendar.HOUR_OF_DAY, 23);
		cd.set(Calendar.MINUTE, 59);
		cd.set(Calendar.SECOND, 59);
		return cd.getTime();
	}

	/**
	 * 判断一字符串是否为日期字串
	 * 
	 * @param str
	 * 
	 * @return boolean
	 */
	public static boolean isDateStr(String str) {

		boolean isDate = false;

		try {
			Date date = formateStringToDate(str, "yyyy-MM-dd HH:mm:ss");

			if (null == date)
			{
				date = formateStringToDate(str, "yyyy-MM-dd");
			}

			if (null != date)
			{
				isDate = true;
			}
		} catch (Exception e) {

		}
		return isDate;
	}
	
	/**
	 * 判断字符串所代表的日期是否为周末(周六、周日)
	 * @param date
	 * @return
	 */
	public static boolean isWeekend(String date) {
		int day = 0;
		try {
			SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			Date time = df.parse(date);
			Calendar cal = Calendar.getInstance();
			cal.setTime(time);

			day = cal.get(Calendar.DAY_OF_WEEK);

		} catch (ParseException e) {
			System.out.println("Format date error!");
			return false;
		}
		
		if (day == Calendar.SATURDAY || day == Calendar.SUNDAY) {
			return true;
		} else {
			return false;
		}
	}
	
	/**
	 * 本月第一天
	 * @return
	 */
	public static Date getFirstDayOfTheMonth(){
	   Calendar calendar = Calendar.getInstance();    
		  		calendar.add(Calendar.MONTH, 0);
		  		calendar.set(Calendar.DAY_OF_MONTH,1);
	    return calendar.getTime(); 
	}
	
	/**
	 * 本月第一天
	 * @return
	 */
	public static Date getFirstDayOfTheMonth(Date targetDate){
	   Calendar calendar = Calendar.getInstance();
	   			calendar.setTime(targetDate);
		  		calendar.add(Calendar.MONTH, 0);
		  		calendar.set(Calendar.DAY_OF_MONTH,1);
	    return calendar.getTime(); 
	}
	
	/**
	 * 本月最后一天
	 * @return
	 */
	public static Date getLastDayOfTheMonth(){
	   Calendar calendar = Calendar.getInstance();    
	   			calendar.set(Calendar.DAY_OF_MONTH, 
			    calendar.getActualMaximum(Calendar.DAY_OF_MONTH));  
	    return calendar.getTime(); 
	}
	
	/**
	 * 本月最后一天
	 * @return
	 */
	public static Date getLastDayOfTheMonth(Date targetDate){
	   Calendar calendar = Calendar.getInstance();    
	   			calendar.setTime(targetDate);
	   			calendar.set(Calendar.DAY_OF_MONTH, 
			    calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
	    return calendar.getTime(); 
	}

	/**
	 * 格式化 日期
	 * @param targetDate
	 * @param targetFormat
	 * @return
	 */
	public static Date formatDate(Date targetDate , String targetFormat){
		SimpleDateFormat format = new SimpleDateFormat(targetFormat);
		return formateStringToDate(format.format(targetDate),targetFormat); 
	}
	/**
	 * 本周第一天
	 * @return
	 */
	public static Date getFirstDayOfTheWeek(){
		Calendar calendar = Calendar.getInstance();  
				 calendar = getADayOfWeek(calendar, Calendar.MONDAY);   
		  return calendar.getTime();
    }
	
	/**
	 * 上周第一天
	 * @lastPeriod 周期 1本周,-1向前推迟一周,2下周,依次类推
	 * @return
	 */
	public static Date getLastWeekOfDayForTarget(int lastPeriod,int dayOfWeek){
		Calendar calendar = Calendar.getInstance();  
				 calendar.add(Calendar.DATE, lastPeriod*7);
				 calendar = getADayOfWeek(calendar, dayOfWeek);   //Calendar.MONDAY
		  return calendar.getTime();
    }
	
	
	/**
	 * 上周第一天
	 * @lastPeriod 周期 1本周,-1向前推迟一周,2下周,依次类推
	 * @return
	 */
	public static Date getLastWeekOfDayForTarget(int lastPeriod,int dayOfWeek,Date date){
		Calendar calendar = Calendar.getInstance();  
		
		calendar.setTime(date);
				 calendar.add(Calendar.DATE, lastPeriod*7);
				 calendar = getADayOfWeek(calendar, dayOfWeek);   //Calendar.MONDAY
		  return calendar.getTime();
    }
	
	
	
	/**
	 * 本周第一天
	 * @param currentDate
	 * @return
	 */
	public static Date getFirstDayOfTheWeek(Date currentDate){
		Calendar calendar = Calendar.getInstance();  
				 calendar.setTime(currentDate);
				 calendar = getADayOfWeek(calendar, Calendar.MONDAY);   
		  return calendar.getTime();
    }
	
	/**
	 * 本周最后一天
	 * 
	 * @return
	 */
	public static Date getLastDayOfTheWeek(){
		Calendar calendar = Calendar.getInstance(); 
				 calendar = getADayOfWeek(calendar, Calendar.SUNDAY);  
		 return calendar.getTime();
    }
	/**
	 * 本周最后一天
	 * 
	 * @param currentDate
	 * @return
	 */
	public static Date getLastDayOfTheWeek(Date currentDate){
		Calendar calendar = Calendar.getInstance(); 
				 calendar.setTime(currentDate);
				 calendar = getADayOfWeek(calendar, Calendar.SUNDAY);  
		 return calendar.getTime();
    }
	
	/**
	 * 本年第一天
	 * @return
	 */
	public static Date getFirstDayOfTheYear(){
		Calendar calendar = Calendar.getInstance();  
				 calendar.set(Calendar.DAY_OF_YEAR, 1);
		return calendar.getTime();
	}
	
	/**
	 * 本年第一天
	 * @param currentDate
	 * @return
	 */
	public static Date getFirstDayOfTheYear(Date currentDate){
		Calendar calendar = Calendar.getInstance();  
				 calendar.set(Calendar.DAY_OF_YEAR, 1);
		return calendar.getTime();
	}

	/**
	 * 
	 * @return
	 */
	public static int getCountWeekOfYear(){
		 Calendar calendar = Calendar.getInstance();
		 		  calendar.setFirstDayOfWeek(Calendar.MONDAY);
		  return calendar.get(Calendar.WEEK_OF_YEAR);
	}

	public static int getCountWeekOfYear(Date currentDate){
		 Calendar calendar = Calendar.getInstance();
		  		  calendar.setTime(currentDate);
		  		  calendar.setFirstDayOfWeek(Calendar.MONDAY);
		  return calendar.get(Calendar.WEEK_OF_YEAR);	
	}
	
	private static Calendar getADayOfWeek(Calendar day, int dayOfWeek) {  
	    int week = day.get(Calendar.DAY_OF_WEEK);  
	    if (week == dayOfWeek)  
	    {
	    	return day;  
	    }
	    int diffDay = dayOfWeek - week;  
	    if (week == Calendar.SUNDAY) {  
	        diffDay -= 7;  
	    } else if (dayOfWeek == Calendar.SUNDAY) {  
	        diffDay += 7;  
	    }  
	    day.add(Calendar.DATE, diffDay);  
	    return day;  
	} 
	
	/**
	 * 月份递推
	 * @param date
	 * @param factor 递推因子
	 * @return
	 */
	public static Date getDayOfMonth(Date date,int month){
		 Calendar calendar = Calendar.getInstance();
         calendar.setTime(date);
         calendar.add(Calendar.MONTH, -month);
         int index = calendar.get(Calendar.DAY_OF_MONTH);
         calendar.add(Calendar.DATE, (month - index));
         return calendar.getTime();
	}
	
	 
	
	/**
	 * 获取去年今日周一
	 * @param currentDate
	 * @return
	 */
	public static Date getLastWeekMonday(Date currentDate) {    
         Calendar calendar = Calendar.getInstance();    
         		  calendar.setTime(currentDate);    
         		  calendar.add(Calendar.YEAR, -1);
         		  calendar.add(Calendar.DAY_OF_MONTH, -1);    
         		  calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);    
           return calendar.getTime();    
     }
	
	/**
	 * 获取去年今日周末
	 * @param currentDate
	 * @return
	 */
	public static Date getLastWeekSunday(Date currentDate) {    
         Calendar calendar = Calendar.getInstance();    
         		  calendar.setTime(currentDate);    
         		  calendar.add(Calendar.YEAR, -1);
         		  calendar.add(Calendar.DAY_OF_MONTH, -1);    
         		  calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);    
           return getDateAddDay(DateUtils.getLastWeekMonday(currentDate),6);
     }
	
	/**
	 * 获取目标日期为第几周
	 * @param targetDate
	 * @return
	 */
	public static int getWeekOfDate(Date targetDate){
		Calendar calendar = Calendar.getInstance();  
	     calendar.setTime(targetDate);  
	     calendar.setFirstDayOfWeek(Calendar.MONDAY);  
	     return calendar.get(Calendar.WEEK_OF_MONTH);
	}
	
	/**
	 * 统计一个月份共多少周
	 * @param currentDate   
	 * @return
	 */
	public static int getCountWeek(Date currentDate){
		Calendar calendar = Calendar.getInstance(); 
				 calendar.setTime(currentDate);
				 calendar.setFirstDayOfWeek(Calendar.MONDAY);  
		return calendar.getActualMaximum(Calendar.WEEK_OF_MONTH);
	}
	 
	
	/**
	 * 判断当前月份为周几
	 * @param currentDate
	 * @return
	 */
	public static int getDayForWeek(Date currentDate){
		Calendar calendar = Calendar.getInstance(); 
		 calendar.setTime(currentDate);
		 int dayForWeek = 0;  
		 if(calendar.get(Calendar.DAY_OF_WEEK) == 1){  
			 dayForWeek = 7;  
		 }else{  
		  dayForWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;  
		 }  
		 return dayForWeek;  
	}
	
	public static Date getDayForWeek(int week){
		Calendar calendar = Calendar.getInstance();
		 calendar.setFirstDayOfWeek(Calendar.MONDAY);
		if(week == 1){
			calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
		}else if(week == 2){
			calendar.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
		}else if(week == 3){
			calendar.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
		}else if(week == 4){
			calendar.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
		}else if(week == 5){
			calendar.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
		}else if(week == 6){
			calendar.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
		}else if(week == 7){
			calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
		}
		return calendar.getTime();
	}
	
	/**
	 * 获取某月份第几周的开始日期
	 * @param currentDate
	 * @param week
	 * @return
	 */
 
	
	public static final Date convertStringToDate(String strDate) throws ParseException {
		SimpleDateFormat df = null;
		Date date = null;
		df = new SimpleDateFormat("yyyy-MM-dd");
		try {
			date = df.parse(strDate);
		} catch (ParseException pe) {
			logger.error("ParseException: " + pe);
		}
		return (date);
	}

	public static Calendar getCalendar(String month, int week) {

		Date newDate;
		Calendar caleNew = null;
        try {
	        newDate = convertStringToDate(month + "-01");
	        caleNew = Calendar.getInstance();
			caleNew.setTime(newDate);
			caleNew.add(Calendar.WEEK_OF_MONTH, week - 1);
        } catch (ParseException e) {
        	logger.error("ParseException: " + e);
        }
		
		return caleNew;
	}

	/**
	 * 获取month月的第week星期的第一天
	 * 
	 * @param month yyyy-MM
	 * @param week 
	 * @return
	 */
	public static Date getFirstOfWeek(String month, int week) {

		Calendar ca = Calendar.getInstance();
		try {
			GregorianCalendar calendar = (GregorianCalendar) getCalendar(month, week); 
			ca.setTime(calendar.getTime());
			ca.set(Calendar.DATE, calendar.get(Calendar.DATE) - calendar.get(Calendar.DAY_OF_WEEK) + 2);
		} catch (Exception e) {
			logger.info(e.getMessage());
		}
		return ca.getTime();
	}

	/**
	 * 获取month月的第week星期的最后一天
	 * 
	 * @param month yyyy-MM
	 * @param week 
	 * @return
	 */
	public static Date getLastOfWeek(String month, int week) {
		Calendar ca = Calendar.getInstance();
		try {
			GregorianCalendar calendar = (GregorianCalendar) getCalendar(month, week);
			ca.setTime(calendar.getTime());
			ca.set(Calendar.DATE, calendar.get(Calendar.DATE) + 8 - calendar.get(Calendar.DAY_OF_WEEK));
		} catch (Exception e) {
			logger.info(e.getMessage());
		}
		return ca.getTime();

	}
	
	
 
	/**
	 * 获得某一日期的第一刻 
	 * @param curDate 某日期
	 * @return Date
	 */
	public static Date getNohhmmss(Date curDate) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(curDate);
		calendar.set(Calendar.AM_PM, Calendar.AM);
		calendar.set(Calendar.HOUR, 0);
		calendar.set(Calendar.MINUTE, 0);
		calendar.set(Calendar.SECOND, 0);
		calendar.set(Calendar.MILLISECOND, 0);
		return calendar.getTime();
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值