All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.zyy.common.util.DateUtils Maven / Gradle / Ivy

package com.zyy.common.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Calendar;
import java.util.Date;

/**
 * 日期工具类
 *
 * @author li.yang
 */
public class DateUtils {
//
    public static final String DATE_PATTERN = "yyyy-MM-dd";
    public static final String HOUR_PATTERN = "yyyy-MM-dd HH";
    public static final String MINUTES_PATTERN = "yyyy-MM-dd HH:mm";
    public static final String TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";

    public static String format(Date date, String pattern) {
        SimpleDateFormat format = new SimpleDateFormat(pattern);
        return format.format(date);
    }

    public static String format(Date date) {
        return format(date, DATE_PATTERN);
    }

    public static Date parse(String str, String pattern) throws ParseException {
        SimpleDateFormat format = new SimpleDateFormat(pattern);
        return format.parse(str);
    }

    public static Date parse(String str) throws ParseException {
        return parse(str, DATE_PATTERN);
    }

    public static Date parse(Date date) throws ParseException {
        return parse(format(date));
    }

    public static Date parse(Date date, String pattern) throws ParseException {
        return parse(format(date, pattern), pattern);
    }

    /**
     * 获取两个时间的最大值
     *
     * @param d1 时间
     * @param d2 时间
     * @return 最大时间
     */
    public static Date getMaxDate(Date d1, Date d2) {
        if (d1 == null) return d2;
        if (d2 == null) return d1;
        if (d1.after(d2)) return d1;
        else return d2;
    }

    /**
     * 获取两个时间的最小值
     *
     * @param d1 时间
     * @param d2 时间
     * @return 最小时间
     */
    public static Date getMinDate(Date d1, Date d2) {
        if (d1 == null) return d2;
        if (d2 == null) return d1;
        if (d1.before(d2)) return d1;
        else return d2;
    }

    /**
     * 计算两个时间差
     *
     * @param d1 第一个时间
     * @param d2 第二个时间
     * @return 计算结果Duration
     */
    public static Duration between(Date d1, Date d2) {
        LocalDateTime begin = d1.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
        LocalDateTime end = d2.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
        return Duration.between(begin, end);
    }

    /**
     * 判断一个时间是否在两个时间之间
     *
     * @return boolean
     */
    public static boolean isBetween(Date begin, Date end, Date target) {
        return begin.compareTo(target) <= 0 && end.compareTo(target) >= 0;
    }

    /**
     * 计算两个时间差
     *
     * @param d1 第一个时间
     * @param d2 第二个时间
     * @return 计算结果(天)
     */
    public static long betweenDay(Date d1, Date d2) {
        LocalDateTime begin = d1.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
        LocalDateTime end = d2.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
        return Duration.between(begin, end).toDays();
    }

    /**
     * 计算两个时间差
     *
     * @param d1 第一个时间
     * @param d2 第二个时间
     * @return 计算结果(小时)
     */
    public static long betweenHours(Date d1, Date d2) {
        LocalDateTime begin = d1.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
        LocalDateTime end = d2.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
        return Duration.between(begin, end).toHours();
    }

    /**
     * 获取两个日期相差的月数,精确到日
     *
     * @param d1 第一个时间
     * @param d2 第二个时间
     * @return ['月','日']
     */
    public static long[] betweenMonth(Date d1, Date d2) {
        Calendar start = Calendar.getInstance();
        start.setTime(d1);
        Calendar end = Calendar.getInstance();
        end.setTime(d2);
        int startDay = start.get(Calendar.DATE);
        int startMonth = start.get(Calendar.MONTH);
        end.add(Calendar.DATE, 1);
        int endDay = end.get(Calendar.DATE);
        int suf = endDay - startDay;
        if (suf == 0) {
            return new long[]{(end.get(Calendar.YEAR) - start.get(Calendar.YEAR)) * 12 + end.get(Calendar.MONTH) - startMonth, 0};
        } else if (suf < 0) {
            end.set(Calendar.DATE, 0);
            return new long[]{(end.get(Calendar.YEAR) - start.get(Calendar.YEAR)) * 12 + end.get(Calendar.MONTH) - startMonth, end.get(Calendar.DATE) + suf};
        } else {
            return new long[]{(end.get(Calendar.YEAR) - start.get(Calendar.YEAR)) * 12 + end.get(Calendar.MONTH) - startMonth, suf};
        }
    }

    /**
     * 计算两个时间差
     *
     * @param d1 第一个时间
     * @return 计算结果(小时)
     */
    public static LocalDateTime toLocalDateTime(Date d1) {
        return d1.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy