日期工具



import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class DateUtil {

	/**
	 * @author yaoxh
	 * @date 2017-7-7 下午5:04:29
	 * @param date
	 * @param interval
	 * @param number
	 * @return 功能:日期加减 获得指定时间前后时间
	 */
	public static Date dateAdd(Date date,String interval,int number){
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		if("y".equals(interval)){
			cal.add(Calendar.YEAR, number);
		}else if("M".equals(interval)){
			cal.add(Calendar.MONTH, number);
		}else if("d".equals(interval)){
			cal.add(Calendar.DATE, number);
		}else if("h".equals(interval)||"H".equals(interval)){
			cal.add(Calendar.HOUR, number);
		}else if("m".equals(interval)){
			cal.add(Calendar.MINUTE, number);
		}else if("s".equals(interval)){
			cal.add(Calendar.SECOND, number);
		}else {
			return null;
		}
		return cal.getTime();
	}
	public static String dateAdd(String dateStr,String interval,int number,String frmt){
		Date date = DateUtil.strToDate(dateStr, frmt);
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		if("y".equals(interval)){
			cal.add(Calendar.YEAR, number);
		}else if("M".equals(interval)){
			cal.add(Calendar.MONTH, number);
		}else if("d".equals(interval)){
			cal.add(Calendar.DATE, number);
		}else if("h".equals(interval)||"H".equals(interval)){
			cal.add(Calendar.HOUR, number);
		}else if("m".equals(interval)){
			cal.add(Calendar.MINUTE, number);
		}else if("s".equals(interval)){
			cal.add(Calendar.SECOND, number);
		}else {
			return null;
		}
		return DateUtil.dateToStr(cal.getTime(),frmt);
	}
	/**
	 * @author yaoxh
	 * @date 2017-6-27 下午3:04:29
	 * @param startDate
	 * @param endDate
	 * @param interval 时间间隔 d天 H小时 ...
	 * @return 功能:获得时间段内的时间集合
	 */
	public static List<Date> getDateList(Date startDate,Date endDate,String interval){
		List<Date> resList=new ArrayList<>();
		if(startDate.before(endDate)||startDate.equals(endDate)){
			while (startDate.before(endDate)){
				resList.add(startDate);
				startDate=DateUtil.dateAdd(startDate,interval,1);
			}
			resList.add(endDate);
		}
		return resList;
	}


	/**
	 * @author yaoxh
	 * @date 2018-6-20
	 * @param startDate
	 * @param interval 时间间隔 d天 H小时 ...
	 * @param length 要得到的日期列表长度
	 * @return 功能:获得时间段内的时间集合
	 */
	public static List<Date> getDateList(Date startDate, String interval, int length) {
		List<Date> resList = new ArrayList<>();
		for (int i = 0; i < length; i++) {
			resList.add(DateUtil.dateAdd(startDate, interval, i));
		}
		return resList;
	}



	/**
	 * @author yaoxh
	 * @date 2017-6-27 下午3:04:29
	 * @param date 获取天数的月份 格式yyyy-MM
	 * @return 功能:获取当月的天数
	 */
	public static int getMonthDays(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.set(Calendar.DATE, 1);
		calendar.roll(Calendar.DATE, -1);
		int maxDate = calendar.get(Calendar.DATE);
		return maxDate;
	}

	/**
	 * @author yaoxh
	 * @date 2017-6-27 下午3:04:29
	 * @param date 获取当前小时
	 * @return 功能:获取当前小时
	 */
	public static int getHourOfDay(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar.get(Calendar.HOUR_OF_DAY);
	}

	/**
	 * @author yaoxh
	 * @date 2017-6-27 下午3:04:29
	 * @param startDate
	 * @param endDate
	 * @param dateType 时间间隔 d天 H小时 ...
	 * @return 功能:获得时间段内的时间集合
	 */
	public static List<Date> getDateList(Date startDate, Date endDate, String dateType, int step) {
		List<Date> resList=new ArrayList<>();
		if(startDate.before(endDate)||startDate.equals(endDate)){
			while (startDate.before(endDate)){
				resList.add(startDate);
				startDate = DateUtil.dateAdd(startDate, dateType, step);
			}
			resList.add(endDate);
		}
		return resList;
	}

	/**
	 * @author yaoxh
	 * @date 2017-6-27 下午3:04:29
	 * @param startTime
	 * @param endTime
	 * @param dateType 时间间隔 d天 H小时 ...
	 * @return 功能:获得时间段内的时间集合
	 */
	public static List<String> getDateList(String startTime, String endTime, String dateType, String format, int step){
		List<String> resList=new ArrayList<>();
		Date startDate = DateUtil.strToDate(startTime, format);
		Date endDate = DateUtil.strToDate(endTime, format);
		if(startDate.before(endDate)||startDate.equals(endDate)){
			while (startDate.before(endDate)){
				resList.add(DateUtil.dateToStr(startDate, format));
				startDate=DateUtil.dateAdd(startDate, dateType, step);
			}
			resList.add(DateUtil.dateToStr(endDate, format));
		}
		return resList;
	}

	/**
	 * @author yaoxh
	 * @date 2017-6-27 下午3:04:29
	 * @param dateType 时间间隔 d天 H小时 ...
	 * @return 功能:获得时间段内的时间集合
	 */
	public static List<String> getDateList(Date startDate, Date endDate, String dateType, String format, int step){
		List<String> resList=new ArrayList<>();
		if(startDate.before(endDate)||startDate.equals(endDate)){
			while (startDate.before(endDate)){
				resList.add(DateUtil.dateToStr(startDate, format));
				startDate=DateUtil.dateAdd(startDate, dateType, step);
			}
		}
		return resList;
	}

	/**
	 * @author yaoxh
	 * @date 2017-6-15 下午5:22:29
	 * @param date
	 * @return 功能:获得时间是周几
	 */
	public static String getWeek(Date date){
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		int week=cal.get(Calendar.DAY_OF_WEEK);//1为周日 7为周六
		String res="";
		if(week==1){
			res="周日";
		}else if (week==2){
			res="周一";
		}else if (week==3){
			res="周二";
		}else if (week==4){
			res="周三";
		}else if (week==5){
			res="周四";
		}else if (week==6){
			res="周五";
		}else if (week==7){
			res="周六";
		}
		return res;
	}

	/**
	 * @author yaoxinghui
	 * @date 2016-5-31 下午5:22:29
	 * @param date
	 * @return 功能:日期转字符串
	 */
	public static String dateToStr(Date date, String formatstr) {
		SimpleDateFormat format = new SimpleDateFormat(formatstr);
		String str = format.format(date);
		return str;
	}

	/**
	 * @author yaoxinghui
	 * @date 2016-6-3 下午4:08:09
	 * @param formatstr
	 * @return 功能:获取当前指定格式时间字符串
	 */
	public static String getNewDate(String formatstr) {
		Date date = new Date();
		SimpleDateFormat format = new SimpleDateFormat(formatstr);
		String str = format.format(date);
		return str;
	}

	/**
	 * @author yaoxinghui
	 * @date 2016-5-31 下午5:22:15
	 * @param str
	 * @return 功能:字符串转日期
	 */
	public static Date strToDate(String str,String formatStr) {
		SimpleDateFormat format = new SimpleDateFormat(formatStr);
		Date date = null;
		try {
			date = format.parse(str);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return date;
	}
	/**
	 * 计算两个日期之间相差的天数
	 * @param smdate 较小的时间
	 * @param bdate  较大的时间
	 * @return 相差天数
	 * @throws ParseException
	 */
	public static int getDaysBetween(Date startTime,Date endTime)
	{
		Calendar cal = Calendar.getInstance();
		cal.setTime(startTime);
		Long time1 = cal.getTimeInMillis();
		cal.setTime(endTime);
		Long time2 = cal.getTimeInMillis();
		Long between_days=(time2-time1)/(1000*3600*24);

		return between_days.intValue();
	}

	/**  
     * 计算两个日期之间相差的天数  
     * @param smdate 较小的时间 
     * @param bdate  较大的时间 
     * @return 相差天数 
     * @throws ParseException  
     */    
    public static int daysBetween(Date smdate,Date bdate) throws ParseException    
    {    
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");  
        smdate=sdf.parse(sdf.format(smdate));  
        bdate=sdf.parse(sdf.format(bdate));  
        Calendar cal = Calendar.getInstance();    
        cal.setTime(smdate);    
        long time1 = cal.getTimeInMillis();                 
        cal.setTime(bdate);    
        long time2 = cal.getTimeInMillis();         
        long between_days=(time2-time1)/(1000*3600*24);  
            
       return Integer.parseInt(String.valueOf(between_days));           
    }   
    /**  
     * 计算两个日期之间相差的天数  
     * @param smdate 较小的时间 
     * @param bdate  较大的时间 
     * @return 相差天数 
     * @throws ParseException  
     */    
    public static int hoursBetween(Date smdate,Date bdate) throws ParseException    
    {    
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH");  
        smdate=sdf.parse(sdf.format(smdate));  
        bdate=sdf.parse(sdf.format(bdate));  
        Calendar cal = Calendar.getInstance();    
        cal.setTime(smdate);    
        long time1 = cal.getTimeInMillis();                 
        cal.setTime(bdate);    
        long time2 = cal.getTimeInMillis();         
        long between_days=(time2-time1)/(1000*3600);  
            
       return Integer.parseInt(String.valueOf(between_days));           
    }   
	/**
	 * @author yaoxinghui
	 * @date 2016-6-3 下午4:00:10
	 * @param specifiedDay 指定日期
	 * @param format  格式
	 * @param day 数值 负数为前几天,正数为后几天
	 * @return 功能:计算指定日期前几天或后几天日期
	 */
	public static String getSpecifiedDay(String specifiedDay,String format, int day) {
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
		Calendar c = Calendar.getInstance();
		Date date = null;
		try {
			date = simpleDateFormat.parse(specifiedDay);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		c.setTime(date);
		c.add(c.DATE, day);
		String dayBefore = simpleDateFormat.format(c.getTime());
		return dayBefore;
	}

	/**
	 * @author yaoxinghui
	 * @date 2016-6-3 下午4:05:58
	 * @param specifiedHour 日期字符串
	 * @param format 格式 
	 * @param hour 数值 负数为前几小时,正数为后几小时
	 * @return 功能:计算指定时间前或后几小时时间
	 */
	public static String getSpecifiedHour(String specifiedHour, String format,int hour) {
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
		Calendar c = Calendar.getInstance();
		Date date = null;
		try {
			date = simpleDateFormat.parse(specifiedHour);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		c.setTime(date);
		c.add(c.HOUR, hour);
		String dayBefore = simpleDateFormat.format(c.getTime());
		return dayBefore;
	}
	/**
	 * @author yaoxinghui
	 * @date 2016-6-3 下午4:05:58
	 * @param specifiedHour 日期字符串
	 * @param format 格式
	 * @param month 数值 负数为前几月,正数为后几月
	 * @return 功能:计算指定时间前或后几小时时间
	 */
	public static String getSpecifiedMonth(String specifiedHour, String format,int month) {
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
		Calendar c = Calendar.getInstance();
		Date date = null;
		try {
			date = simpleDateFormat.parse(specifiedHour);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		c.setTime(date);
		c.add(c.MONTH, month);
		String dayBefore = simpleDateFormat.format(c.getTime());
		return dayBefore;
	}
	/**
	 * @author yaoxinghui
	 * @date 2016-6-3 下午4:05:58
	 * @param specifiedHour 日期字符串
	 * @param format 格式
	 * @param year 数值 负数为前几年,正数为后几年
	 * @return 功能:计算指定时间前或后几小时时间
	 */
	public static String getSpecifiedYear(String specifiedHour, String format,int year) {
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
		Calendar c = Calendar.getInstance();
		Date date = null;
		try {
			date = simpleDateFormat.parse(specifiedHour);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		c.setTime(date);
		c.add(c.YEAR, year);
		String dayBefore = simpleDateFormat.format(c.getTime());
		return dayBefore;
	}
	public static Timestamp strToTimestamp(String str,String format){
		Timestamp ts = new Timestamp(System.currentTimeMillis());  
        String tsStr = dateToStr(strToDate(str,format),"yyyy-MM-dd HH:mm:ss"); 
        try {  
            ts = Timestamp.valueOf(tsStr);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }
        return ts;
	}
	//通过日期计算该日期为一年中第几天
	public static String getDateByDayOfYear(String param) throws ParseException {
		String year = "20"+param.substring(0, 2);
		int dayOfYear = Integer.valueOf(param.substring(2, param.length()))-1;
		Date date1 = new Date();
		String yyyy = DateUtil.dateToStr(date1, "yyyy");
		Date start = new SimpleDateFormat("yyyyMMdd").parse(yyyy+"0101");
		Calendar ca = Calendar.getInstance();
		ca.setTime(start);
		ca.add(Calendar.DATE,dayOfYear);
		String month = "";
		String date  = "";
		if(ca.get(Calendar.MONTH)+1<10){
			month="0"+String.valueOf(ca.get(Calendar.MONTH)+1);
		}else{
			month = String.valueOf(ca.get(Calendar.MONTH)+1);
		}
        if(ca.get(Calendar.DATE)<10){
			date = "0"+String.valueOf(ca.get(Calendar.DATE));
		}else{
			date  = String.valueOf(ca.get(Calendar.DATE));
		}
		return  String.valueOf(ca.get(Calendar.YEAR))+month+date;
	}
	//通过一年中第几天来计算日期
	public static String getDayOfYearByDate(String date) throws ParseException {
		Date dd = new SimpleDateFormat("yyyyMMdd").parse(date);
		Calendar ca = Calendar.getInstance();
		ca.setTime(dd);
		String year = String.valueOf(ca.get(Calendar.YEAR)).substring(2,4);
		int i = ca.get(Calendar.DAY_OF_YEAR);
		String index = "";
		if(i<10){
			index = "00"+String.valueOf(i);
		}else if(i>=10&&i<100){
			index = "0"+String.valueOf(i);
		}else{
			index = String.valueOf(i);
		}
		return year+index;
	}
	//通过一年中第几天来计算日期
	public static Integer getDayOfYear(String date) throws ParseException {
		Date dd = new SimpleDateFormat("yyyyMMdd").parse(date);
		Calendar ca = Calendar.getInstance();
		ca.setTime(dd);
		return ca.get(Calendar.DAY_OF_YEAR);
	}
	//获取指定日期月总天数
	public static int getDaysOfMonth(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
	}
	/**
	 * 获得日期为当年的那一天
	 * @param date 传入日期
	 * @return
	 */
	public static int getDayOfYear(Date date){
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		return cal.get(Calendar.DAY_OF_YEAR);
	}

	/**
	 * 获得该月第一天
	 * @param date 传入日期
	 * @return
	 */
	public static Date getFirstDayOfMonth(Date date){
		Calendar cal = Calendar.getInstance();
		//设置年份
		cal.setTime(date);
		//获取某月最小天数
		int firstDay = cal.getActualMinimum(Calendar.DAY_OF_MONTH);
		//设置日历中月份的最小天数
		cal.set(Calendar.DAY_OF_MONTH, firstDay);
		//格式化日期
		return cal.getTime();
	}

	/**
	 * 获得该月最后一天
	 * @param date 传入日期
	 * @return
	 */
	public static Date getLastDayOfMonth(Date date){
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		//获取某月最大天数
		int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
		//设置日历中月份的最大天数
		cal.set(Calendar.DAY_OF_MONTH, lastDay);
		//格式化日期
		return cal.getTime();
	}

	/**
	 * 获得当前日期本月的天数
	 * @param date 传入日期
	 * @return
	 */
	public static int getDaysOfCurrentMonth(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar.get(Calendar.DAY_OF_MONTH);
	}

	// 返回第几季度  1-3
	//

	/**
	 * 反回第几季度
	 * 季度一年四季, 第一季度:1月-3月, 第二季度:4月-6月, 第三季度:7月-9月, 第四季度:10月-12月
	 * @param month
	 * @return
     */
	public static int getQuarterInMonth(int month) {
		int months[] = { 1, 2, 3, 4 };
		if (month >= 1 && month <= 3)
			return months[0];
		else if (month >= 4 && month <= 6)
			return months[1];
		else if (month >= 7 && month <= 9)
			return months[2];
		else
			return months[3];
	}

	public static Date getQuarterFirstDate(String year,int quarter) {
		String months[] = { "01", "04", "07", "10" };
		String dateStr=year+months[quarter-1]+"01";
		return getFirstDayOfMonth(DateUtil.strToDate(dateStr,"yyyyMMdd"));
	}
	public static Date getQuarterLastDate(String year,int quarter) {
		String months[] = { "03", "06", "09", "12" };
		String dateStr=year+months[quarter-1]+"01";
		return getLastDayOfMonth(DateUtil.strToDate(dateStr,"yyyyMMdd"));
	}
	public static void main(String[] args) throws ParseException {
		System.out.println(DateUtil.getMonthDays(DateUtil.strToDate("20180201","yyyyMMdd")));
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值