Java工具类DateUtils

package org.gpscloud.util;

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

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;

public class DateUtils {

    private final static Logger logger = LoggerFactory.getLogger(DateUtils.class);
    private static final String DATE_FORMAT_DEFAULT = "yyyy-MM-dd HH:mm:ss";
    private static final String DATE_FORMAT_YMD = "yyyy-MM-dd";

   /** 
    * 获得某天最大时间 2018-07-04 23:59:59
    */
	public static Date getEndOfDay(Date date) {
		LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault());;
		LocalDateTime endOfDay = localDateTime.with(LocalTime.MAX);
		return Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant());
	}

    /** 
    * 获得某天最小时间 2018-07-04 00:00:00
    */
	public static Date getStartOfDay(Date date) {
		LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault());
		LocalDateTime startOfDay = localDateTime.with(LocalTime.MIN);
		return Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant());
	}

    /**
     * 取得当前日期所在周的第一天
     * 周一为第一天
     * @param date
     * @return
     */
    public static Date getMonDayOfWeek(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setTime(date);
        calendar.set(Calendar.DAY_OF_WEEK,
                calendar.getFirstDayOfWeek()); // MONDAY
        return calendar.getTime();
    }

    /**
     * 取得当前日期所在周的最后一天
     *
     * @param date
     * @return
     */
    public static Date getLastDayOfWeek(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setFirstDayOfWeek(Calendar.SUNDAY);
        calendar.setTime(date);
        calendar.set(Calendar.DAY_OF_WEEK,
                calendar.getFirstDayOfWeek() + 6); // Saturday
        return calendar.getTime();
    }
    /**
     * 得到几天前的时间
     * @param d
     * @param day
     * @return
     */
    public static Date getDateBefore(Date d,int day){
        Calendar now =Calendar.getInstance();
        now.setTime(d);
        now.set(Calendar.DATE,now.get(Calendar.DATE)-day);
        return now.getTime();
    }

    /**
     * 得到几天后的时间
     * @param d
     * @param day
     * @return
     */
    public static Date getDateAfter(Date d,int day){
        Calendar now =Calendar.getInstance();
        now.setTime(d);
        now.set(Calendar.DATE,now.get(Calendar.DATE)+day);
        return now.getTime();
    }

    /**
     *  两个时间年月相等
     * @param date1
     * @param date2
     * @return
     */
    public static boolean isSameMonth(Date date1, Date date2) {
        try {
            Calendar cal1 = Calendar.getInstance();
            cal1.setTime(date1);

            Calendar cal2 = Calendar.getInstance();
            cal2.setTime(date2);

            boolean isSameYear = cal1.get(Calendar.YEAR) == cal2
                    .get(Calendar.YEAR);
            boolean isSameMonth = isSameYear
                    && cal1.get(Calendar.MONTH) == cal2.get(Calendar.MONTH);
//			boolean isSameDate = isSameMonth
//					&& cal1.get(Calendar.DAY_OF_MONTH) == cal2
//					.get(Calendar.DAY_OF_MONTH);  两个时间年月日都相等

            return isSameMonth;
        } catch (Exception e) {
//			logger.error("[RatingEngine] error occurred: ERROR ", e);
        }
        return false;

    }


    public static String getCurrentTime()
    {
        return new DateTime().toString(DATE_FORMAT_DEFAULT);
    }

    public static String getCurrentDay()
    {
        return new DateTime().toString(DATE_FORMAT_YMD);
    }

    public static String getCurrentTime(Date date)
    {
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_DEFAULT);
        return sdf.format(date);
    }

    public static String getCurrentDay(Date date)
    {
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_YMD);
        return sdf.format(date);
    }

    /**
     * 获取SimpleDateFormat
     *
     * @param parttern 日期格式
     * @return SimpleDateFormat对象
     * @throws RuntimeException 异常:非法日期格式
     */
    private static SimpleDateFormat getDateFormat(String parttern) throws RuntimeException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(parttern);
        simpleDateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
        return simpleDateFormat;
    }

    public static Date getNextDate(Date date) {
        Calendar cd = Calendar.getInstance();
        cd.setTime(date);
        cd.add(Calendar.DATE, 1);//增加一天
        //cd.add(Calendar.MONTH, n);//增加一个月
        return cd.getTime();
    }

    /**
     * 将日期字符串转化为日期。失败返回null。
     *
     * @param dataStr   日期字符串
     * @param dataStyle 日期格式
     * @return 日期
     */
    public static Date stringToDate(String dataStr, String dataStyle) {
        Date myDate = null;
        if (dataStr != null) {
            try {
                myDate = getDateFormat(dataStyle).parse(dataStr);
            } catch (Exception e) {
            }
        }
        return myDate;
    }


    /**
     * 计算两个日期之间相差的天数
     *
     * @param smdate 较小的时间
     * @param bdate  较大的时间
     * @return 相差天数
     */
    public static Integer daysBetween(Date smdate, Date bdate) {
        Integer days = null;
        try {
            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);

            days = Integer.parseInt(String.valueOf(between_days));
        } catch (ParseException e) {
            logger.error("daysBetween error {}", e);
        }
        return days;
    }

    /**
     * 比较年份是否相同
     *
     * @param sDate 开始时间
     * @param eDate 结束时间
     * @return boolean
     */
    public static boolean isSameYear(Date sDate, Date eDate) {
        return new DateTime(sDate).getYear() == new DateTime(eDate).getYear();
    }

    /**
     * 时间范围在一小时之内
     *
     * @param locateDate locateDate
     * @param recordTime recordTime
     * @return
     */
    public static boolean isSameYearAnDayAndHours(Date locateDate, Date recordTime) {

        return Seconds.secondsBetween(new DateTime(locateDate), new DateTime(recordTime)).getSeconds() <= 3600;
    }  
}


猜你喜欢

转载自blog.csdn.net/u013694478/article/details/80817643