天天看點

Java自定義日期工具類

引入相應的maven依賴

<dependency>
  <groupId>cn.hutool</groupId>
  <artifactId>hutool-all</artifactId>
  <version>5.7.14</version>
</dependency>
           

代碼實作

import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;

import java.util.Date;

/**
 * 日期工具類
 */
public class DateUtils {

    /**
     * 将時間字元串轉換成日期類型,當字元串為空時,傳回目前時間
     * @param str 時間字元串
     * @param format (可以轉換類型: yyyy-MM-dd HH:mm:ss,yyyy-MM-dd)
     * @return java.util.Date
     */
    public static Date stringConvertDate(String str, String format) {
        if ("yyyy-MM-dd HH:mm:ss".equals(format)) {
            return DateUtil.parse(str, "yyyy-MM-dd HH:mm:ss");
        }
        if ("yyyy-MM-dd".equals(format)) {
            return DateUtil.parse(str, "yyyy-MM-dd");
        }
        return null;
    }

    /**
     * 擷取目前時間
     * @return java.util.Date
     */
    public static Date getNowDate() {
        return DateUtil.date();
    }

    /**
     * 擷取目前日期字元串
     * @param type (type=1時,傳回yyyy-MM-dd HH:mm:ss格式。type=2時,傳回yyyy-MM-dd格式)
     * @return java.lang.String
     */
    public static String getNowDateStr(int type) {
        String str = "";
        if (type == 1) {
            //yyyy-MM-dd HH:mm:ss
            str = DateUtil.now();
        }
        if (type == 2) {
            //yyyy-MM-dd
            str = DateUtil.today();
        }
        return str;
    }

    /**
     * 擷取年份和月份
     * @param type (year, month)
     * @return int
     */
    public static int getYearOrMonthOrDay(String type) {
        Date date = DateUtil.date();
        if ("year".equals(type)) {
            //獲得年的部分
            return DateUtil.year(date);
        }
        if ("month".equals(type)) {
            //獲得月份,從0開始計數
            return DateUtil.month(date)+1;
        }
        return -1;
    }

    /**
     * 給指定的日期增減天
     * @param date  日期
     * @param number    天數,正則加,負則減
     * @return java.lang.String
     */
    public static String addDay(Date date, int number) {
        DateTime dateTime = DateUtil.offsetDay(date, number);
        return DateUtil.formatDateTime(dateTime);
    }

    /**
     * 給指定的日期增減月
     * @param date  日期
     * @param number    月數,正則加,負則減
     * @return java.lang.String
     */
    public static String addMonth(Date date, int number) {
        DateTime dateTime = DateUtil.offsetMonth(date, number);
        return DateUtil.formatDateTime(dateTime);
    }

    /**
     * 給指定的日期增減小時
     * @param date  日期
     * @param number    小時數,正則加,負則減
     * @return java.lang.String
     */
    public static String addHour(Date date, int number) {
        DateTime dateTime = DateUtil.offsetHour(date, number);
        return DateUtil.formatDateTime(dateTime);
    }

    /**
     * 給指定的日期增減分鐘
     * @param date  日期
     * @param number    分鐘數,正則加,負則減
     * @return java.lang.String
     */
    public static String addMinute(Date date, int number) {
        DateTime dateTime = DateUtil.offsetMinute(date, number);
        return DateUtil.formatDateTime(dateTime);
    }

    /**
     * 給指定的日期增減秒
     * @param date  日期
     * @param number    秒數,正則加,負則減
     */
    public static String addSecond(Date date, int number) {
        DateTime dateTime = DateUtil.offsetSecond(date, number);
        return DateUtil.formatDateTime(dateTime);
    }

    /**
     * 擷取昨天日期(傳回日期類型)
     * @return java.util.Date
     */
    public static Date getYesterdayDate() {
        return DateUtil.yesterday();
    }

    /**
     * 擷取昨天日期(傳回字元串類型)
     * @return String
     */
    public static String getYesterdayString() {
        DateTime yesterday = DateUtil.yesterday();
        return DateUtil.formatDateTime(yesterday);
    }

    /**
     * 擷取明天日期(傳回日期類型)
     * @return java.util.Date
     */
    public static Date getTomorrowDate() {
        return DateUtil.tomorrow();
    }

    /**
     * 擷取明天日期(傳回字元串類型)
     * @return String
     */
    public static String getTomorrowString() {
        DateTime tomorrow = DateUtil.tomorrow();
        return DateUtil.formatDateTime(tomorrow);
    }


    /**
     * 擷取上周日期(傳回日期類型)
     * @return java.util.Date
     * @author 小宇宙
     * @date 2021/12/11 22:22:08
     */
    public static Date getLastWeekDate() {
        return DateUtil.lastWeek();
    }

    /**
     * 擷取上周日期(傳回字元串類型)
     * @return String
     */
    public static String getLastWeekString() {
        DateTime lastWeek = DateUtil.lastWeek();
        return DateUtil.formatDateTime(lastWeek);
    }

    /**
     * 擷取下周日期(傳回日期類型)
     * @return java.util.Date
     */
    public static Date getNextWeekDate() {
        return DateUtil.nextWeek();
    }

    /**
     * 擷取下周日期(傳回字元串類型)
     * @return String
     */
    public static String getNextWeekString() {
        DateTime nextWeek = DateUtil.nextWeek();
        return DateUtil.formatDateTime(nextWeek);
    }


    /**
     * 擷取上個月日期(傳回日期類型)
     * @return java.util.Date
     */
    public static Date getLastMonthDate() {
        return DateUtil.lastMonth();
    }

    /**
     * 擷取上個月日期(傳回字元串類型)
     * @return String
     */
    public static String getLastMonthString() {
        DateTime lastMonth = DateUtil.lastMonth();
        return DateUtil.formatDateTime(lastMonth);
    }


    /**
     * 擷取下個月日期(傳回日期類型)
     * @return java.util.Date
     */
    public static Date getNextMonthDate() {
        return DateUtil.nextMonth();
    }

    /**
     * 擷取下個月日期(傳回字元串類型)
     * @return String
     */
    public static String getNextMonthString() {
        DateTime nextMonth = DateUtil.nextMonth();
        return DateUtil.formatDateTime(nextMonth);
    }

    /**
     * 擷取兩個日期之間相差的天數
     * @param date1 開始時間
     * @param date2 結束時間
     * @return long
     */
    public static long getDateBetweenByDay(Date date1, Date date2) {
        return DateUtil.between(date1, date2, DateUnit.DAY);
    }

    /**
     * 擷取兩個日期之間相差的小時數
     * @param date1 開始時間
     * @param date2 結束時間
     * @return long
     */
    public static long getDateBetweenByHour(Date date1, Date date2) {
        return DateUtil.between(date1, date2, DateUnit.HOUR);
    }

    /**
     * 擷取兩個日期之間相差的分鐘數
     * @param date1 開始時間
     * @param date2 結束時間
     * @return long
     */
    public static long getDateBetweenByMinute(Date date1, Date date2) {
        return DateUtil.between(date1, date2, DateUnit.MINUTE);
    }

    /**
     * 擷取兩個日期之間相差的秒數
     * @param date1 開始時間
     * @param date2 結束時間
     * @return long
     */
    public static long getDateBetweenBySecond(Date date1, Date date2) {
        return DateUtil.between(date1, date2, DateUnit.SECOND);
    }

    /**
     * 擷取兩個日期之間相差的周數
     * @param date1 開始時間
     * @param date2 結束時間
     * @return long
     */
    public static long getDateBetweenByWeek(Date date1, Date date2) {
        return DateUtil.between(date1, date2, DateUnit.WEEK);
    }

    /**
     * 擷取開始時間和結束時間之間相差的時間
     * @param beginDate 開始時間
     * @param endDate   結束時間
     * @return java.lang.String
     */
    public static String getDateBetweenMsg(Date beginDate, Date endDate) {
        return DateUtil.formatBetween(beginDate, endDate);
    }

    /**
     * 根據出生日期擷取年齡
     * @param birthDay 出生日期
     * @return int
     */
    public static int getAge(String birthDay) {
        return DateUtil.ageOfNow(birthDay);
    }
}
           

測試代碼

@Test
    void testDateUtils() {
        String str = "2022-04-29";
        Date date = DateUtils.stringConvertDate(str, "yyyy-MM-dd");
        System.out.println(date);

        Date nowDate = DateUtils.getNowDate();
        System.out.println("擷取目前日期(Date類型):" + nowDate);

        //擷取目前日期(String類型),格式:yyyy-MM-dd
        String nowDateStr = DateUtils.getNowDateStr(2);
        System.out.println("擷取目前日期(字元串類型): " + nowDateStr);
        //擷取目前日期(String類型),格式:yyyy-MM-dd HH:mm:ss
        String nowDateStr1 = DateUtils.getNowDateStr(1);
        System.out.println("擷取目前日期(字元串類型): " + nowDateStr1);

        int month = DateUtils.getYearOrMonthOrDay("month");
        System.out.println("擷取目前時間月份:" + month);

        //date = "2022-04-29";
        System.out.println("給指定時間加天數:"+DateUtils.addDay(date, 2));
        System.out.println("給指定時間加月數:"+DateUtils.addMonth(date, 2));
        System.out.println("給指定時間加小時數:"+DateUtils.addHour(date, 2));
        System.out.println("給指定時間加分鐘數:"+DateUtils.addMinute(date, 2));
        System.out.println("給指定時間加秒數:"+DateUtils.addSecond(date, 2));

        System.err.println("昨天(傳回日期類型):"+DateUtils.getYesterdayDate());
        System.err.println("昨天(傳回字元串類型):"+DateUtils.getYesterdayString());
        System.err.println("明天(傳回日期類型):"+DateUtils.getTomorrowDate());
        System.err.println("明天(傳回字元串類型):"+DateUtils.getTomorrowString());
        System.err.println("上周(傳回日期類型):"+DateUtils.getLastWeekDate());
        System.err.println("上周(傳回字元串類型):"+DateUtils.getLastWeekString());
        System.err.println("下周(傳回日期類型):"+DateUtils.getNextWeekDate());
        System.err.println("下周(傳回字元串類型):"+DateUtils.getNextWeekString());
        System.err.println("上個月(傳回日期類型):"+DateUtils.getLastMonthDate());
        System.err.println("上個月(傳回字元串類型):"+DateUtils.getLastMonthString());
        System.err.println("下個月(傳回日期類型):"+DateUtils.getNextMonthDate());
        System.err.println("下個月(傳回字元串類型):"+DateUtils.getNextMonthString());

        String dateStr1 = "2017-04-12 00:33:00";
        Date date1 = DateUtil.parse(dateStr1);
        String dateStr2 = "2017-04-23 23:33:23";
        Date date2 = DateUtil.parse(dateStr2);
        System.out.println("相差的天數:"+DateUtils.getDateBetweenByDay(date1, date2));
        System.out.println("相差的小時數:"+DateUtils.getDateBetweenByHour(date1, date2));
        System.out.println("相差的分鐘數:"+DateUtils.getDateBetweenByMinute(date1, date2));
        System.out.println("相差的秒數:"+DateUtils.getDateBetweenBySecond(date1, date2));
        System.out.println("相差的周數:"+DateUtils.getDateBetweenByWeek(date1, date2));
        System.out.println("相差的時間:"+DateUtils.getDateBetweenMsg(date1, date2));

        System.out.println("根據年月日擷取年齡:"+DateUtils.getAge("1996-06-28"));
    }
           

測試結果

Java自定義日期工具類