java日期处理代码

下面的代码封装了一系列日期处理的方法,大家看看有没有用得上的,有需要的话就拿去用吧!


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

/**
 * @author vita小马哥
 * @date 2018年1月25日 上午9:24:19
 * Date日期处理工具类
 */
public class DateUtils {

	/**
	 * 获取指定格式的日期
	 * @param format  日期格式(如yyyy-MM-dd HH:mm:ss)
	 * @return String格式的日期
	 * @throws Exception
	 */
	public static String getFormatDate(String format){
		SimpleDateFormat sdfDays = new SimpleDateFormat(format);
		return sdfDays.format(new Date());
	}
	
	/**
	 * 转换日期格式
	 * @param  date    日期
	 * @param  format  日期格式(如yyyy-MM-dd HH:mm:ss)
	 * @return String格式的日期
	 * @throws Exception
	 */
	public static String formatDate(Date date, String format){
		SimpleDateFormat sdfDays = new SimpleDateFormat(format);
		return sdfDays.format(date);
	}
	
	/**
     * 得到n天之后的日期
     * @param days
     * @param format
     * @return
     */
    public static String getAfterDayDate(String days,String format){
    	
    	int daysInt = Integer.parseInt(days);
    	
        Calendar canlendar = Calendar.getInstance(); // java.util包
        canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
        Date date = canlendar.getTime();
        
        SimpleDateFormat sdfd = new SimpleDateFormat(format);
        String dateStr = sdfd.format(date);
        
        return dateStr;
    }

    /**
     * 比较两个日期的大小
     *
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @return true : 结束时间 > 开始时间
     */
    public static boolean dateCompare(Date startDate, Date endDate) {
        boolean dateComPareFlag = true;
        if (endDate.compareTo(startDate) != 1) {
            dateComPareFlag = false;
        }
        return dateComPareFlag;
    }
    
    /**
	* @Title: compareDate
	* @Description: TODO(日期比较,如果s>=e 返回true 否则返回false)
	* @param s
	* @param e
	* @return boolean  
	* @throws
	* @author luguosui
	 */
	public static boolean compareDate(String s, String e,String format) {
		
		Date sd = fomatDate(s,format);
		Date ed = fomatDate(e,format);
		
		if(sd == null||ed == null){
			return false;
		}
		return sd.getTime() >= ed.getTime();
	}
	
	/**
	 * 格式化日期
	 * 
	 * @return
	 */
	public static Date fomatDate(String date,String format) {
		DateFormat fmt = new SimpleDateFormat(format);
		try {
			return fmt.parse(date);
		} catch (ParseException e) {
			e.printStackTrace();
			return null;
		}
	}
	
	/**
     * 计算两个时间之间相差的分钟数,“结束时间”减去“开始时间”之间的分钟数.
     *
     * @param beginTime 开始时间
     * @param endTime   结束时间
     * @return int 分钟数。小于0:开始时间大于结束时间  大于0:开始时间小于结束时间
     */
    public static long calMinutes(Date beginTime, Date endTime) {
        if (beginTime == null || endTime == null) {
            return 0;
        }
        long diff = endTime.getTime() - beginTime.getTime();
        return Math.abs(diff / (60 * 1000));
    }
    
    /**
     * 计算两个日期的时间差  返回具体的天数
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return int : 天数
     */
    public static int secondsBetween(Date startTime, Date endTime) {
        if (startTime == null || endTime == null) {
            return 0;
        }
        return (int) ((endTime.getTime() - startTime.getTime()) / (1000 * 60 * 60 * 24));
    }
    
    /**
     * 根据生日计算当前年龄.
     * <p>准确到天,比如:<br/>
     * 当前时间为 2008-06-17 ,生日为 1982-06-16 ,计算结果为 26<br/>
     * 当前时间为 2008-06-17 ,生日为 1982-06-17 ,计算结果为 26<br/>
     * 当前时间为 2008-06-17 ,生日为 1982-06-18 ,计算结果为 25<br/>
     * </p>
     *
     * @param birthDay 必须是一个 Date 对象,否则直接返回 0
     * @return int : 年龄
     */
    public static int getAge(Object birthDay) {
        Date aDate = null;
        if (birthDay instanceof Date) {
            aDate = (Date) birthDay;
        }
        if (aDate != null) {
            Calendar today = Calendar.getInstance();
            Calendar birthday = Calendar.getInstance();
            birthday.setTime(aDate);
            int yearTotal = today.get(Calendar.YEAR) - birthday.get(Calendar.YEAR);
            int bDay = today.get(Calendar.DAY_OF_YEAR) - birthday.get(Calendar.DAY_OF_YEAR);
            //not yet match 1 round age, minus one year
            if (bDay < 0) {
                yearTotal = yearTotal - 1;
            }
            return yearTotal;
        }
        return 0;
    }

    /**
     * 根据年龄,得到的生日日期
     *
     * @param age 年龄
     * @return 生日日期
     */
    public static Date getBirthDay(int age) {
        GregorianCalendar gc = new GregorianCalendar();
        int currYear = gc.get(Calendar.YEAR);
        gc.set(Calendar.YEAR, currYear - age);
        Date birthDate = new Date(gc.getTime().getTime());//精确到天,haidong.zhou edit 2006-07-14
        return birthDate;
    }
    
    /**
     * 日期 转 字符串
     *
     * @param date   日期
     * @param patten 字符串格式
     * @return str
     */
    public static String parseToFormatDateString(Date date, String patten) {
        if (date == null || StringUtils.isBlank(patten)) {
            return "";
        }
		SimpleDateFormat format = new SimpleDateFormat(patten);
        return format.format(date);
    }
    
    /**
     * 字符串 转 日期
     *
     * @param dateStr 日期格式字符串
     * @param dateFmt 转换格式
     * @return
     * @throws ParseException If the string and the format is not match, exception will be thrown
     */
    public static Date toUtilDate(String dateStr, String dateFmt) throws ParseException {
		SimpleDateFormat format = new SimpleDateFormat(dateFmt);
        return format.parse(dateStr.trim());
    }
    
    /**
     * 明天日期
     *
     * @param date Date
     * @return Date
     */
    public static Date getTomorrow(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.DATE, 1);
        return cal.getTime();
    }
    
    /**
     * 判断 date是否大于等于开始日期,小于等于结束日期
     *
     * @param date 指定某个日期
     * @param from 开始日期
     * @param to   结束日期
     * @return
     * @author: zhanghailang
     */
    public static boolean isDateInRange(Date date, Date from, Date to) {
        if ((date.after(from) && date.before(to)) || date.compareTo(from) == 0 || date.compareTo(to) == 0) {
            return true;
        }
        return false;
    }
    
    /**
     * 获取当天日期
     *
     * @return Date
     */
    public static Date getDate() {
        Calendar cal = Calendar.getInstance();
        return cal.getTime();
    }
    
    /**
     * 在日期上添加多几个月,并返回日期.
     *
     * @param date   - 日期
     * @param amount - 添加多少月
     * @return date
     */
    public static Date addMonth(Date date, int amount) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.MONTH, amount);
        return cal.getTime();
    }
    
    /**
     * 计算两个时间之间相差的分钟数,“结束时间”减去“开始时间”之间的分钟数.
     *
     * @param beginTime 开始时间
     * @param endTime   结束时间
     * @return int 分钟数。如果开始时间或者结束时间为 null 的话,返回 0 。
     */
    public static int minutesBetween(Date beginTime, Date endTime) {
        if (beginTime == null || endTime == null) {
            return 0;
        }
        long diff = endTime.getTime() - beginTime.getTime();
        return (int) diff / (60 * 1000);
    }
    
    /**
     * 当天日期向前推多少天
     *
     * @param day
     * @return Date
     */
    public final static Date getBeforeDateTime(int day) {
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DATE, -day);
        return calendar.getTime();
    }
    
    /**
     * 根据日期 得到 这周的 星期天
     *
     * @param day     日期
     * @param hmsFlag true: 时分秒为0 ,flase : 时分秒为23:59:59
     * @return Date
     */
    public final static Date getWeekDayToSunday(Date day, boolean hmsFlag) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(day);
        calendar.setFirstDayOfWeek(GregorianCalendar.MONDAY);
        calendar.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.SUNDAY);

        if (hmsFlag) {
            calendar.set(Calendar.HOUR_OF_DAY, 0);
            calendar.set(Calendar.MINUTE, 0);
            calendar.set(Calendar.SECOND, 0);
        } else {
            calendar.set(Calendar.HOUR_OF_DAY, 23);
            calendar.set(Calendar.MINUTE, 59);
            calendar.set(Calendar.SECOND, 59);
        }
        return calendar.getTime();
    }
    
    /**
     * 根据日期 得到 这周的 星期一
     *
     * @param day     日期
     * @param hmsFlag true: 时分秒为0 ,flase : 时分秒为23:59:59
     * @return Date
     */
    public final static Date getWeekDayToMonday(Date day, boolean hmsFlag) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(day);
        calendar.setFirstDayOfWeek(GregorianCalendar.MONDAY);
        calendar.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.MONDAY);

        if (hmsFlag) {
            calendar.set(Calendar.HOUR_OF_DAY, 0);
            calendar.set(Calendar.MINUTE, 0);
            calendar.set(Calendar.SECOND, 0);
        } else {
            calendar.set(Calendar.HOUR_OF_DAY, 23);
            calendar.set(Calendar.MINUTE, 59);
            calendar.set(Calendar.SECOND, 59);
        }
        return calendar.getTime();
    }
    
    /**
     * 根据日期 得到 这周的 星期天
     *
     * @param day 日期
     * @return Date
     */
    public final static Date getWeekDayToSunday(Date day) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(day);
        calendar.setFirstDayOfWeek(GregorianCalendar.MONDAY);
        calendar.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.SUNDAY);
        return calendar.getTime();
    }

    /**
     * 根据日期 得到 本月的第一天
     *
     * @return Date
     */
    public final static Date getMonthDayToFirstDay(Date day) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(day);
        calendar.setFirstDayOfWeek(GregorianCalendar.MONDAY);
        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
        return calendar.getTime();
    }
    
    /**
     * 计算时间差 精确到秒
     *
     * @param beginTime 开始时间
     * @param endTime   结束时间
     * @return 秒数
     */
    public static int callSecond(Date beginTime, Date endTime) {
        long beetween = endTime.getTime() - beginTime.getTime();
        long day = beetween / (24 * 60 * 60 * 1000);
        long hour = (beetween / (60 * 60 * 1000) - (beetween / (24 * 60 * 60 * 1000)) * 24);
        long min = ((beetween / (60 * 1000)) - day * 24 * 60 - hour * 60);
        long s = (beetween / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
        //System.out.println(day + "天" + hour + "小时" + min + "分" + s + "秒");
        long d = day * 24 * 60 * 60;
        long h = hour * 60 * 60;
        long m = min * 60;
        return (int) (d + h + m + s);
    }
    
    /**
     * 当前日期添加多少分钟后的时间
     *
     * @param date   - 时间
     * @param minute - 添加多少分钟
     * @return date
     * @deprecated 请用addMinute替换
     */
    @Deprecated
    public static Date subtractMinute(Date date, int minute) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.MINUTE, minute);
        return cal.getTime();
    }
    
    /**
     * 当前日期的年份
     *
     * @param date -日期
     * @return int:年份
     */
    public static Integer getYear(Date date) {
        if (null == date) {
            return 0;
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.YEAR);
    }
    
    /**
     * 计算两个时间之间的小时数,精确到秒。
     * <p>比如:2008-07-10 17:41:01 和 2008-07-11 17:41:01 之间相差为 24 个小时。</p>
     * <p>比如:2008-07-10 17:41:01 和 2008-07-11 17:41:00 之间相差为 23 个小时。</p>
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return int : 小时数
     */
    public static double compareHours(Date startTime, Date endTime) {
        if (startTime == null || endTime == null) {
            return 0;
        }

        long between = (endTime.getTime() - startTime.getTime()) / 1000; //秒
        long day1 = between / (24 * 3600);
        long hour1 = between % (24 * 3600) / 3600;
        long minute1 = between % 3600 / 60;
        long second1 = between % 60 / 60;
        //System.out.println(""+day1+"天"+hour1+"小时"+minute1+"分"+second1+"秒");
        double hour2 = (double) minute1 / 60;
        double v = (double) hour1 + hour2;
        java.text.DecimalFormat df = new java.text.DecimalFormat("#0.00");
        return Double.parseDouble(df.format(v));
    }
    
    /**
     * 某年某月的第一天
     *
     * @param year  int 年份
     * @param month int 月份
     */
    public static Date getFristDayOfMonth(int year, int month) {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, year);
        cal.set(Calendar.MONTH, month-1);
        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        return cal.getTime();
    }

    /**
     * 某年某月的最后一天
     *
     * @param year  int 年份
     * @param month int 月份
     */
    public static Date getLastDayOfMonth(int year, int month) {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, year);
        cal.set(Calendar.MONTH, month-1);
        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        return cal.getTime();
    }
	
}




猜你喜欢

转载自blog.csdn.net/qq9808/article/details/79157955