java 常用日期转换与日期计算综合

整理出常用的一些日期转换及日期计算比较等, 部分通用方法未全部列出, 若有遗漏后续会不断更新.
亲测可用

package com.lx.benefits.bean.dto.yx.utils;

import com.apollo.common.enums.base.DatePatternEnum;
import com.apollo.common.exception.BusinessException;
import com.apollo.common.response.enums.CommonMsgEnum;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;

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

public class DateUtils1 {

    private static Logger logger = LoggerFactory.getLogger(DateUtils1.class);

    public static final String DATETIMEFORMAT = "yyyyMMddHHmmss";

    public static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";

    public static final long DAY_MILLIS = 24 * 60 * 60 * 1000;

    public static final long HOUR_MILLIS = 60 * 60 * 1000;

    public static final long MINUTE_MILLIS = 60 * 1000;


    /**
     * 将[日期]按照给定的[日期格式]转成[字符串]
     *
     * @param date   日期
     * @param format 日期格式
     * @return
     */
    public static String parseDateToString(Date date, String format) {
        if (date == null) {
            return null;
        }
        if (StringUtils.isEmpty(format)) {
            format = DATE_TIME_FORMAT;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.format(date);
    }

    /**
     * 将[时间]按照指定的[日期格式]转成[字符串]
     *
     * @param time   时间
     * @param format 日期格式
     * @return
     */
    public static String parseLongToString(long time, String format) {
        SimpleDateFormat mydate = new SimpleDateFormat(format);
        return mydate.format(new Date(time));
    }

    /**
     * 将[字符串]按照指定的[日期格式]转成[时间]
     *
     * @param time   字符串
     * @param format 日期格式
     * @return
     */
    public static long parseStringToLong(String time, String format) {
        SimpleDateFormat mydate = new SimpleDateFormat(format);
        try {
            Date date = mydate.parse(time);
            if (date != null) {
                return date.getTime();
            }
        } catch (ParseException e) {
            logger.error("Date parse error:", e);
        }
        return 0;
    }
    /**
     * 将[字符串]按照指定的[日期格式]转成[日期]
     * @param strDate   字符串
     * @param format 日期格式
     * @return
     */
    public static Date parseStrToDate(String strDate,String format) {
        if (StringUtils.isEmpty(strDate)) {
            return null;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        try {
            Date date = sdf.parse(strDate);
            if (date != null) {
                return date;
            }
            return null;
        } catch (ParseException e) {
            throw new BusinessException(CommonMsgEnum.DATE_TRANSFER_ERROR.getCodeMsg());
        }
    }
    /**
     * 减去天数(负数为添加)
     * @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 date   日期
     * @param amount 增加天数
     * @return
     */
    public static Date addDay(Date date, int amount) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_MONTH, amount);
        return calendar.getTime();
    }
    /**
     * 得到几个小时之前的时间
     * @param hour 正数为几小时之钱,负数为几小时之后
     * @return
     */
    public static Date getSomeHourBefore(Date date, int hour) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) - hour);
        return calendar.getTime();
    }
    /**
     * 得到前后几分钟的时间
     * @param mins 正数为几分钟之后,负数为几分钟之前
     * @return
     */
    public static Date getSomeMinsBefore(Date date, int mins) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MINUTE, mins);
        return calendar.getTime();
    }
    /**
     * 获取半小时前的时间
     * @param d 时间
     */
    public static Date getHalfHourBefore(Date d) {
        if (d == null) {
            return null;
        }
        long timestamp = d.getTime();
        timestamp -= 1000 * 60 * 30;
        return new Date(timestamp);
    }
    /**
     * 获取半小时后的时间
     * @param d 时间
     */
    public static Date getHalfHourAfter(Date d) {
        if (d == null) {
            return null;
        }
        long timestamp = d.getTime();
        timestamp += 1000 * 60 * 30;
        return new Date(timestamp);
    }
    /**
     * 获取一周的第一天
     * @param day
     * @return
     */
    public static Date getWeekStart(Date day) {
        Calendar calendar = Calendar.getInstance();
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setTime(day);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        calendar.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek());
        return calendar.getTime();
    }
    /**
     * 获取一周的最后一天
     * @param day
     * @return
     */
    public static Date getWeekEnd(Date day) {
        Calendar calendar = Calendar.getInstance();
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setTime(day);
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 999);
        calendar.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek() + 6);
        return calendar.getTime();
    }
    /**
     * 获取一个月的第一天
     * @param day
     * @return
     */
    public static Date getFirstDayOfMonth(Date day) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(day);
        calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), 1);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTime();
    }
    /**
     * 获取一个月的最后一天
     *
     * @param day
     * @return
     */
    public static Date getLastDayOfMonth(Date day) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(day);
        calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), 1);
        calendar.roll(Calendar.DATE, -1);
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 999);
        return calendar.getTime();
    }
    /**
     * 获取某天的开始时间
     * @param date 日期
     */
    public static Date getStartTime(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        //calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTime();
    }
    /**
     * 获取某天的结束时间
     * @param date 日期
     */
    public static Date getEndTime(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 999);
        return calendar.getTime();
    }

    /**
     * 判断是否是同一天
     * @param day1
     * @param day2
     * @return
     */
    public static boolean isSameDay(Date day1, Date day2) {
        SimpleDateFormat sdf = new SimpleDateFormat(DatePatternEnum.Y_M_D.getPattern());
        String ds1 = sdf.format(day1);
        String ds2 = sdf.format(day2);
        return ds1.equals(ds2);
    }

    /**
     * 日期间隔天数
     * @param startDateStr
     * @param endDateStr
     * @return
     */
    public static int daysBetween(String startDateStr, String endDateStr) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(DatePatternEnum.Y_M_D.getPattern());
            Date startDate = sdf.parse(startDateStr);
            Date endDate = sdf.parse(endDateStr);
            Calendar cal = Calendar.getInstance();
            cal.setTime(startDate);
            long time1 = cal.getTimeInMillis();
            cal.setTime(endDate);
            long time2 = cal.getTimeInMillis();
            long between_days = (time2 - time1) / (1000 * 3600 * 24);

            return Integer.parseInt(String.valueOf(between_days));
        } catch (ParseException e) {
            throw new BusinessException(CommonMsgEnum.DATE_TRANSFER_ERROR.getCodeMsg());
        }
    }
    /**
     * 日期相差毫秒数
     * @param startDate
     * @param endDate
     * @return
     */
    public static long getTimeDiff(Date startDate, Date endDate) {
        long startTime = startDate.getTime();
        long endTime = endDate.getTime();
        return (endTime - startTime);
    }

    /**
     * 字符串日期相差毫秒数
     * @param startDate
     * @param endDate
     * @return
     */
    public static long getTimeDiff(String startDate, String endDate) {
        return getTimeDiff(parseStrToDate(startDate,DatePatternEnum.Y_M_D_SPACE_H_M_S.getPattern()), parseStrToDate(endDate,DatePatternEnum.Y_M_D_SPACE_H_M_S.getPattern()));
    }
    /**
     * 计算两个字符日期之间小时分钟差00.00
     * @param time1
     * @param time2
     * @return
     */
    public static String getTimeDifference(String time1, String time2) {
        SimpleDateFormat sdf = new SimpleDateFormat(DatePatternEnum.Y_M_D_SPACE_H_M_S.getPattern());
        long t1;
        try {
            t1 = sdf.parse(time1).getTime();
            long t2 = sdf.parse(time2).getTime();
            long diff = t2 - t1;
            long h = diff / (1000 * 60 * 60);
            long dm = diff % (1000 * 60 * 60);
            long min = dm / (1000 * 60);
            if (min == 0) {
                return h + ":00";
            }
            if (min < 10) {
                return h + ":0" + min;
            }
            return h + ":" + min;
        } catch (ParseException e) {
            return "";
        }
    }
    /**
     * 判断是否一周的星期几
     * @param date
     * @return
     */
    public static boolean checkDayOfWeek(Date date,int dayOfWeek){
        Calendar cal = Calendar.getInstance();
        cal.setTime( date );
        if(cal.get(Calendar.DAY_OF_WEEK)==dayOfWeek ) {
            return true;
        }
        return false;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值