计算时间工具类

package com.core.utils;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

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

/**
 * util型的日期数据和sql型的日期数据进行互换,并提供日期数据的格式化输出。
 *
 * @author 
 */
@Slf4j
public class DateUtil {
    public static final String FORMAT_DATE_TIME_MILLI = "yyyy-MM-dd HH:mm:ss.SSS";
    public static final String FORMAT_DATE_TIME = "yyyy-MM-dd HH:mm:ss";
    public static final String FORMAT_DATE_TIME_NO = "yyyyMMddHHmmss";
    public static final String FORMAT_DATE = "yyyy-MM-dd";
    public static final String FORMAT_DATE_NO = "yyyyMMdd";
    public static final String FORMAT_DATA_NO_YY = "yyMMdd";
    public static final String FORMAT_TIME_MILLI = "HH:mm:ss.SSS";
    public static final String FORMAT_TIME = "HH:mm:ss";
    public static final String FORMAT_TIME_NO_YY="MM/dd";

    // Internal values for using in date/time calculations
    public static final long MILLISECOND_OF_SECOND = 1000;
    public static final long MILLISECOND_OF_MINUTE = MILLISECOND_OF_SECOND * 60;
    public static final long MILLISECOND_OF_HOUR = MILLISECOND_OF_MINUTE * 60;
    public static final long MILLISECOND_OF_DAY = MILLISECOND_OF_HOUR * 24;
    public static final long MILLISECOND_OF_WEEK = MILLISECOND_OF_DAY * 7;
    public static final long MILLISECOND_OF_YEAR = MILLISECOND_OF_DAY * 365;
    public static final int MINUTE_OF_HALF_HOUR_ADD = 30;
    public static final int MINUTE_OF_HALF_HOUR_DEDUCE = -30;

    public DateUtil() {
    }

    public static String format(Date date, String format) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            return sdf.format(date);
        } catch (Exception e) {
            return null;
        }
    }

    public static Date parse(String date, String format) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            return sdf.parse(date);
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 添加或减少周
     */
    public static Date addWeek(Date date, int weeks) {
        if (date != null) {
            return new Date(date.getTime() + weeks * MILLISECOND_OF_WEEK);
        }
        return date;
    }

    /**
     * 添加或减少天数
     */
    public static Date addDay(Date date, int days) {
        if (date != null) {
            return new Date(date.getTime() + days * MILLISECOND_OF_DAY);
        }
        return date;
    }

    /**
     * 添加或减少小时
     */
    public static Date addHour(Date date, int hours) {
        if (date != null) {
            return new Date(date.getTime() + hours * MILLISECOND_OF_HOUR);
        }
        return date;
    }

    /**
     * 添加或减少分钟
     */
    public static Date addMinutes(Date date, int minutes) {
        if (date != null) {
            return new Date(date.getTime() + minutes * MILLISECOND_OF_MINUTE);
        }
        return date;
    }

    /**
     * 添加或减少秒
     */
    public static Date addSeconds(Date date, int seconds) {
        if (date != null) {
            return new Date(date.getTime() + seconds * MILLISECOND_OF_SECOND);
        }
        return date;
    }

    /**
     * 获得某个月的第一天0时0分0秒的时间
     *
     * @param year
     * @param month
     * @return java.util.Date
     */
    public static Date getFirstDateOfMonth(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, 1);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);

        return cal.getTime();
    }

    /**
     * 获取某一天的0时0分0秒的时间
     *
     * @param year
     * @param month
     * @param day
     * @return
     */
    public static Date getFirstTimeOfDay(int year, int month, int day) {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, year);
        cal.set(Calendar.MONTH, month - 1);
        cal.set(Calendar.DAY_OF_MONTH, day);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);

        return cal.getTime();
    }

    /**
     * 获取某一天的0时0分0秒的时间
     *
     * @param date
     * @return
     */
    public static Date getFirstTimeOfDay(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        return cal.getTime();
    }

    /**
     * 获取某一天的23时59分59秒的时间
     *
     * @param date
     * @return
     */
    public static Date getLastTimeOfDay(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        return cal.getTime();
    }

    /**
     * 获取某一天指定的时间
     *
     * @param date
     * @return
     */
    public static Date getDateFromCustomTime(Date date, int hour, int minute, int second) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.set(Calendar.HOUR_OF_DAY, hour);
        cal.set(Calendar.MINUTE, minute);
        cal.set(Calendar.SECOND, second);
        return cal.getTime();
    }

    /**
     * 获得Date型对象,根据时间点
     *
     * @param year
     * @param month
     * @param day
     * @return
     */
    public static Date getDateFromTime(int year, int month, int day, int hour, int minute, int second) {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, year);
        cal.set(Calendar.MONTH, month - 1);
        cal.set(Calendar.DAY_OF_MONTH, day);
        cal.set(Calendar.HOUR_OF_DAY, hour);
        cal.set(Calendar.MINUTE, minute);
        cal.set(Calendar.SECOND, second);

        return cal.getTime();
    }

    /**
     * 将util型的日期型的数据转换为sql型的日期数据
     *
     * @param date java.util.Date
     * @return java.sql.Date
     */
    public static java.sql.Date utilToSql(Date date) {
        return new java.sql.Date(date.getTime());
    }

    /**
     * 将sql型的日期型的数据转换为util型的日期数据
     *
     * @param sqlDate
     * @return java.util.Date
     */
    public static Date sqlToUtil(java.sql.Date sqlDate) {
        return new Date(sqlDate.getTime());
    }

    /**
     * 将时间字符串进行相加操作后格式化输出
     *
     * @param timeStr 格式<HH:mm>
     * @param hour
     * @param minute
     * @param second
     * @return 格式<HH:mm>
     */
    public static String timeOperate(String timeStr, int hour, int minute, int second) {
        SimpleDateFormat df = new SimpleDateFormat("HH:mm");
        String[] times = timeStr.trim().split(":");
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(times[0]));
        calendar.set(Calendar.MINUTE, Integer.valueOf(times[1]));
        calendar.add(Calendar.HOUR_OF_DAY, hour);
        calendar.add(Calendar.MINUTE, minute);
        calendar.add(Calendar.SECOND, second);
        return df.format(calendar.getTime());

    }

    /**
     * 根据指定string生成当天时间
     *
     * @param timeStr 格式<HH:mm>
     * @return 秒和毫秒时间为0
     */
    public static Date getCurrentDayTimeByStr(String timeStr) {
        String[] times = timeStr.trim().split(":");
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(times[0]));
        calendar.set(Calendar.MINUTE, Integer.valueOf(times[1]));
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTime();
    }

    /**
     * 两个日期是否是同一天
     *
     * @param firstDate
     * @param secondDate
     * @return
     */
    public static boolean inTheSameDay(Date firstDate, Date secondDate) {
        Calendar first = Calendar.getInstance();
        first.setTime(firstDate);
        Calendar second = Calendar.getInstance();
        second.setTime(secondDate);
        int year1 = first.get(Calendar.YEAR);
        int month1 = first.get(Calendar.MONTH);
        int day1 = first.get(Calendar.DAY_OF_MONTH);
        int year2 = second.get(Calendar.YEAR);
        int month2 = second.get(Calendar.MONTH);
        int day2 = second.get(Calendar.DAY_OF_MONTH);
        if (year1 == year2 && month1 == month2 && day1 == day2) {
            return true;
        }
        return false;
    }

    /**
     * 获取当前时间所在年的周数
     *
     * @param date
     * @return
     * @author lishengtao
     * @date 2017-07-19
     */
    public static int getWeekOfYear(Date date) {
        Calendar c = Calendar.getInstance();
        c.setFirstDayOfWeek(Calendar.MONDAY);
        c.setMinimalDaysInFirstWeek(4);
        c.setTime(date);
        return c.get(Calendar.WEEK_OF_YEAR);
    }

    /**
     * 获取指定时间所在周的开始日期
     *
     * @param date
     * @return
     * @author lishengtao
     * @date 2017-07-19
     */
    public static Date getFirstDayOfWeek(Date date) {
        Calendar c = Calendar.getInstance();
        c.setFirstDayOfWeek(Calendar.MONDAY);
        c.setTime(date);
        c.set(Calendar.HOUR_OF_DAY, 0);
        c.set(Calendar.MINUTE, 0);
        c.set(Calendar.SECOND, 0);
        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday
        return c.getTime();
    }

    /**
     * 获取某年的第几周的开始日期
     *
     * @param year
     * @param week
     * @return
     * @author lishengtao
     * @date 2017-07-19
     */
    public static Date getFirstDayOfWeek(int year, int week) {
        Calendar c = Calendar.getInstance();
        c.setTime(new Date());
        c.set(Calendar.YEAR, year);
        c.set(Calendar.HOUR_OF_DAY, 0);
        c.set(Calendar.MINUTE, 0);
        c.set(Calendar.SECOND, 0);
        Date theDate = c.getTime();
        int weekNum = getWeekOfYear(theDate);
        return getFirstDayOfWeek(DateUtil.addWeek(c.getTime(), week - weekNum));
    }

    /**
     * 获取某年的第几周的结束日期
     *
     * @param year
     * @param week
     * @return
     * @author lishengtao
     * @date 2017-07-19
     */
    public static Date getLastDayOfWeek(int year, int week) {
        return DateUtil.addDay(getFirstDayOfWeek(year, week), 6);
    }

    /**
     * 获取两个日期间隔的天数
     *
     * @param early
     * @param late
     * @return
     * @author lishengtao
     * @date 2017-07-24
     */
    public static final int daysBetween(Date early, Date late) {
        Calendar calst = Calendar.getInstance();
        Calendar caled = Calendar.getInstance();
        calst.setTime(early);
        caled.setTime(late);
        //设置时间为0时
        calst.set(Calendar.HOUR_OF_DAY, 0);
        calst.set(Calendar.MINUTE, 0);
        calst.set(Calendar.SECOND, 0);
        caled.set(Calendar.HOUR_OF_DAY, 0);
        caled.set(Calendar.MINUTE, 0);
        caled.set(Calendar.SECOND, 0);
        //得到两个日期相差的天数
        int days = ((int) (caled.getTime().getTime() / 1000) - (int) (calst
                .getTime().getTime() / 1000)) / 3600 / 24;
        return days;
    }

    /**
     * 查询耗时时间:单位秒
     *
     * @param start Long
     * @param end   Long
     * @return
     * @author zhangwentao
     * @date 2018-1-30
     */
    public static Long getElapsedTime(Long start, Long end) {
        return (end - start) / 1000;
    }

    /**
     * 比较两个日期的大小
     *
     * @param DATE1
     * @param DATE2
     * @return
     */
    public static Integer compareDate(String DATE1, String DATE2) {
        DateFormat df = new SimpleDateFormat(FORMAT_DATE_TIME);
        try {
            if (StringUtils.isNotEmpty(DATE1) && StringUtils.isNotEmpty(DATE2)) {
                Date dt1 = df.parse(DATE1);
                Date dt2 = df.parse(DATE2);
                if (dt1.getTime() > dt2.getTime()) {
                    return 1;
                } else if (dt1.getTime() < dt2.getTime()) {
                    return -1;
                } else {
                    return 0;
                }
            }
        } catch (ParseException e) {
            log.error("compareDate error", e);
        }
        return 0;
    }

    /**
     * 比较两个日期的大小
     *
     * @param dt1
     * @param dt2
     * @return
     */
    public static Integer compareDate(Date dt1, Date dt2) {
        if (dt1 != null && dt2 != null) {
            if (dt1.getTime() > dt2.getTime()) {
                return 1;
            } else if (dt1.getTime() < dt2.getTime()) {
                return -1;
            } else {
                return 0;
            }
        }
        return 0;
    }

    /**
     * 查询开始时间和结束时间的相差分钟数
     *
     * @param startTime
     * @param endTime
     * @return
     */
    public static Long getDurationMin(Date startTime, Date endTime) {
        long duration = endTime.getTime() - startTime.getTime();
        Double durationMin = (double) duration / (1000 * 60);
        return Math.round(durationMin);
    }

    /**
     * 查询开始时间和结束时间的相差秒数
     *
     * @param startTime
     * @param endTime
     * @return
     */
    public static Long getDurationSecond(Date startTime, Date endTime) {
        long duration = endTime.getTime() - startTime.getTime();
        Double durationSecond = (double) duration / 1000;
        return Math.round(durationSecond);
    }

    public static String getGapTime(Long time) {
        if(time == null){
            return "";
        }
        long hours = time / (60 * 60) ;
        long minutes = ((time / 60) - (hours * 60 ));
        return hours + "小时" + minutes+"分";
    }


    public static void main(String[] args) {
        System.out.println(getGapTime(662522123L));
    }

    /**
     * 获取当前精确到秒的时间戳
     * @return
     */
    public static int getCurSecondTimestamp(){
        String timestamp = String.valueOf(new Date().getTime()/1000);
        return Integer.valueOf(timestamp);
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值