DateUtil工具类


import org.apache.commons.lang3.time.DateFormatUtils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class DateUtil {

    private static final String dateTimeFormat = "yyyy-MM-dd HH:mm:ss";
    private final static String TZ_DATE_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
    private final static String YYYY_MM_DD_PATTERN = "yyyy-MM-dd";
    private final static String YYYY_MM_DD_SPRIT_PATTERN = "yyyy/MM/dd";
    private final static String M_D_PATTERN = "M/d";
    private final static String HH_MM_SS_PATTERN = "HH:mm:ss";
    private final static String YYYY_MM_dd_HH_mm_ss_PATTERN = "yyyy/MM/dd HH:mm:ss";

    private final static String YYYY_MM_dd = "yyyy-MM-dd 00:00:00";


    /**
     * date转string
     *
     * @param date
     * @param pattern 指定样式
     * @return
     */
    public static String dateToString(Date date, String pattern) {
        return DateFormatUtils.format(date, pattern);
    }


    /**
     * string转 date
     *
     * @param pattern 指定样式
     * @param date
     */
    public static Date stringToDate(String date, String pattern) throws ParseException {
        SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
        return dateFormat.parse(date);
    }


    /**
     * 将TZ-String类型的日期格式化为时分秒String
     *
     * @param date
     * @return
     * @throws ParseException
     */
    public static String formatTime(String date, String pattern) throws ParseException {
        SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
        return DateFormatUtils.format(dateFormat.parse(date), HH_MM_SS_PATTERN);
    }

    /**
     * date转long
     */
    public static long dateToLong(Date date) {
        long dateLong = date.getTime();
        return dateLong;
    }


    /**
     * long转date
     */
    public static Date longToDate(long dateLong) {
        Date date = new Date(dateLong);
        return date;
    }


    /**
     * 获取当前时间
     * 格式:yyyy/MM/dd 00:00:00
     */
    public static String getCurrentDate(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd 00:00:00");
        return sdf.format(new java.util.Date());
    }


    public static int toYear(Date date) {
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        return calendar.get(Calendar.YEAR);
    }


    public static String getYearMonthday(Date date) {
        Calendar calendar = Calendar.getInstance();
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        // long l1 = format.parse(format.format(calendar.getTime())).getTime();
        return format.format(calendar.getTime());
    }

    /**
     * 获取本地日期
     * 格式 :yyyy-MM-dd 2022-01-20
     */
    public static LocalDate getDateTime() {
        return LocalDate.now();
    }


    /**
     * LocalDate转换成Date
     * 格式 : Mon Jan 17 00:00:00 CST 2022
     */
    public static Date localDateToDate(LocalDate localDate) {
        return Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
    }


    /**
     * Date转 LocalDate
     * 格式 :yyyy-MM-dd
     */
    public static LocalDate dateToLocalDate(Date date) {
        return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDate();
    }

    /**
     * Date转 LocalDateTime
     * 格式 :
     */
    public static LocalDateTime dateToLocalDateTime(Date date) {
        return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();
    }

    /**
     * LocalDateTime转  Date
     * 格式 :
     */
    public static Date localDateTimeToDate(LocalDateTime localDateTime) {
        return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
    }


    public static Date addDate(Date date, long day) throws Exception {

        // 得到指定日期的毫秒数
        long time = date.getTime();
        // 要加上的天数转换成毫秒数
        day = day * 24 * 60 * 60 * 1000;
        // 相加得到新的毫秒数
        time += day;
        // 将毫秒数转换成日期
        return new Date(time);
    }


    /**
     * 时间加减方法,offset = 负数,则减;负责,则加
     *
     * @param date
     * @param offset
     */
    public static Date dateAdd(Date date, int offset) {
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.add(Calendar.DATE, offset);
        return calendar.getTime();
    }

    /**
     * 设置为当天最小时间戳
     */
    public static Date dateConvertMinTimestamp(Date date) {
        Calendar calendar = new GregorianCalendar();
        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();
    }

    /**
     * 设置为当天最大时间戳
     */
    public static Date dateConvertMaxTimestamp(Date date) {
        Calendar calendar = new GregorianCalendar();
        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();
    }

    /**
     * 获取到当天最大时间戳的差值
     */
    public static int getMaxTimeStamapDValueBySecond() {
        return (int) ((dateConvertMaxTimestamp(new Date()).getTime() - System.currentTimeMillis() + 1) / 1000);
    }

    public final static long ONE_DAY_TO_MILLISECOND = 86400000L;
    public final static int ONE_HOUR_TO_MILLISECOND = 3600000;
    public final static int ONE_MINUTE_TO_MILLISECOND = 60000;
    public final static int ONE_SECOND_TO_MILLISECOND = 1000;
    public final static String DAY_CNAME = "天";
    public final static String HOUR_CNAME = "小时";
    public final static String MINUTE_CNAME = "分";
    public final static String SECOND_CNAME = "秒";
    public final static String DAY_ENAME = "d";
    public final static String HOUR_ENAME = "h";
    public final static String MINUTE_ENAME = "m";
    public final static String SECOND_ENAME = "s";

    /**
     * 格式为xx小时xx分钟xx秒
     */
    public static String longTimeFormatToHMS(Long time) {
        if (time == null || time == 0L) {
            return "";
        }
        StringBuilder result = new StringBuilder();


        int day = (int) (time / ONE_DAY_TO_MILLISECOND);
        if (day > 0) {
            result.append(day).append(DAY_CNAME);
            time = time - day * ONE_DAY_TO_MILLISECOND;
        }

        int hour = (int) (time / ONE_HOUR_TO_MILLISECOND);
        if (hour > 0) {
            result.append(hour).append(HOUR_CNAME);
            time = time - hour * ONE_HOUR_TO_MILLISECOND;
        }

        int minute = (int) (time / ONE_MINUTE_TO_MILLISECOND);
        if (minute > 0) {
            result.append(minute).append(MINUTE_CNAME);
            time = time - minute * ONE_MINUTE_TO_MILLISECOND;
        }

        int second = Math.round(time / ONE_SECOND_TO_MILLISECOND);

        if (result.length() < 1 && second < 1) {
            second = 1;
        }

        result.append(second).append(SECOND_CNAME);

        return result.toString();
    }

    /**
     * 时分秒格式为 xx h xx m xx
     *
     * @param time
     * @return
     */
    public static String longTimeFormatToHMSEName(Long time) {
        if (time == null || time == 0L) {
            return "";
        }
        StringBuilder result = new StringBuilder();
        int day = (int) (time / ONE_DAY_TO_MILLISECOND);
        if (day > 0) {
            result.append(day).append(DAY_ENAME);
            time = time - day * ONE_DAY_TO_MILLISECOND;
        }

        int hour = (int) (time / ONE_HOUR_TO_MILLISECOND);
        if (hour > 0) {
            result.append(hour).append(HOUR_ENAME);
            time = time - hour * ONE_HOUR_TO_MILLISECOND;
        }

        int minute = (int) (time / ONE_MINUTE_TO_MILLISECOND);
        if (minute > 0) {
            result.append(minute).append(MINUTE_ENAME);
            time = time - minute * ONE_MINUTE_TO_MILLISECOND;
        }

        int second = Math.round(time / ONE_SECOND_TO_MILLISECOND);

        if (result.length() < 1 && second < 1) {
            second = 1;
        }

        result.append(second).append(SECOND_ENAME);

        return result.toString();
    }

    /**
     * 转化为秒
     *
     * @param time
     * @return
     */
    public static String longTimeFormatToS(Long time) {
        if (time == null || time == 0L) {
            return "";
        }
        return String.valueOf(Math.round(time / ONE_SECOND_TO_MILLISECOND));
    }

    /**
     * 判断两个日期年月日是否相同
     */
    public static boolean dateCompare(Date source, Date target) {
        Calendar srouceCalendar = new GregorianCalendar();
        Calendar targetCalendar = new GregorianCalendar();
        srouceCalendar.setTime(source);
        targetCalendar.setTime(target);

        if (srouceCalendar.get(Calendar.YEAR) == targetCalendar.get(Calendar.YEAR)
                && srouceCalendar.get(Calendar.MONTH) == targetCalendar.get(Calendar.MONTH)
                && srouceCalendar.get(Calendar.DATE) == targetCalendar.get(Calendar.DATE)) {
            return true;
        }
        return false;
    }

    public static int dateBetween(Date source, Date target) {
        Calendar calendarSource = new GregorianCalendar();
        Calendar calendarTarget = new GregorianCalendar();

        calendarSource.setTime(source);
        calendarSource.set(Calendar.HOUR_OF_DAY, 0);
        calendarSource.set(Calendar.MINUTE, 0);
        calendarSource.set(Calendar.SECOND, 0);
        calendarSource.set(Calendar.MILLISECOND, 0);

        calendarTarget.setTime(target);
        calendarTarget.set(Calendar.HOUR_OF_DAY, 0);
        calendarTarget.set(Calendar.MINUTE, 0);
        calendarTarget.set(Calendar.SECOND, 0);
        calendarTarget.set(Calendar.MILLISECOND, 0);

        int day = (int) (Math.abs(calendarSource.getTimeInMillis() - calendarTarget.getTimeInMillis()) / ONE_DAY_TO_MILLISECOND);

        return Math.abs(day);
    }


    public static void main(String[] args) throws Exception {

        String str = DateUtil.dateToString(new Date(), TZ_DATE_PATTERN);
        System.out.println(str);

        String yearMonthday = DateUtil.getYearMonthday(new Date());
        System.out.println(yearMonthday);

        LocalDate date = DateUtil.getDateTime();
        System.out.println(date);


    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值