天天看點

手動封裝一個日期處理工具類,幾乎覆寫了所有的時間操作(收藏)

作者:Java程式設計世界

工具類包含以下方法:

  • - stringToDate: 将字元串轉換為java.util.Date類型
  • - dateToString: 将java.util.Date類型轉換為字元串
  • - stringToLocalDateTime: 将字元串轉換為LocalDateTime類型
  • - localDateTimeToString: 将LocalDateTime類型轉換為字元串
  • - dateToLocalDateTime: 将java.util.Date類型轉換為LocalDateTime類型
  • - localDateTimeToDate: 将LocalDateTime類型轉換為java.util.Date類型
  • - addDate: 在java.util.Date類型日期上增加或減少指定時間
  • - addLocalDateTime: 在LocalDateTime類型日期上增加或減少指定時間

廢話就不說了,直接上代碼,建議收藏,實用的話幫忙點個贊!

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;

public class DateUtil {

    /**
     * 将字元串轉換為java.util.Date類型
     *
     * @param strDate 日期字元串
     * @param format  日期格式
     * @return java.util.Date類型日期
     * @throws ParseException 解析異常
     */
    public static Date stringToDate(String strDate, String format) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.parse(strDate);
    }

    /**
     * 将java.util.Date類型轉換為字元串
     *
     * @param date   java.util.Date類型日期
     * @param format 日期格式
     * @return 日期字元串
     */
    public static String dateToString(Date date, String format) {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.format(date);
    }

    /**
     * 将字元串轉換為LocalDateTime類型
     *
     * @param strDate 日期字元串
     * @param format  日期格式
     * @return LocalDateTime類型日期
     */
    public static LocalDateTime stringToLocalDateTime(String strDate, String format) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
        return LocalDateTime.parse(strDate, formatter);
    }

    /**
     * 将LocalDateTime類型轉換為字元串
     *
     * @param localDateTime LocalDateTime類型日期
     * @param format        日期格式
     * @return 日期字元串
     */
    public static String localDateTimeToString(LocalDateTime localDateTime, String format) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
        return localDateTime.format(formatter);
    }

    /**
     * 将java.util.Date類型轉換為LocalDateTime類型
     *
     * @param date java.util.Date類型日期
     * @return LocalDateTime類型日期
     */
    public static LocalDateTime dateToLocalDateTime(Date date) {
        return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
    }

    /**
     * 将LocalDateTime類型轉換為java.util.Date類型
     *
     * @param localDateTime LocalDateTime類型日期
     * @return java.util.Date類型日期
     */
    public static Date localDateTimeToDate(LocalDateTime localDateTime) {
        return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
    }

    /**
     * 在java.util.Date類型日期上增加或減少指定時間
     *
     * @param date   java.util.Date類型日期
     * @param field  時間類型,如Calendar.MINUTE,Calendar.HOUR,Calendar.DATE等
     * @param amount 增加或減少的時間數值
     * @return 增加或減少後的java.util.Date類型日期
     */
    public static Date addDate(Date date, int field, int amount) {
        java.util.Calendar cal = java.util.Calendar.getInstance();
        cal.setTime(date);
        cal.add(field, amount);
        return cal.getTime();
    }

    /**
     * 在LocalDateTime類型日期上增加或減少指定時間
     *
     * @param localDateTime LocalDateTime類型日期
     * @param field         時間類型,如ChronoUnit.MINUTES,ChronoUnit.HOURS,ChronoUnit.DAYS等
     * @param amount        增加或減少
 * @return 增加或減少後的LocalDateTime類型日期
 */
public static LocalDateTime addLocalDateTime(LocalDateTime localDateTime, int field, int amount) {
    switch (field) {
        case java.time.temporal.ChronoUnit.SECONDS:
            return localDateTime.plusSeconds(amount);
        case java.time.temporal.ChronoUnit.MINUTES:
            return localDateTime.plusMinutes(amount);
        case java.time.temporal.ChronoUnit.HOURS:
            return localDateTime.plusHours(amount);
        case java.time.temporal.ChronoUnit.DAYS:
            return localDateTime.plusDays(amount);
        case java.time.temporal.ChronoUnit.WEEKS:
            return localDateTime.plusWeeks(amount);
        case java.time.temporal.ChronoUnit.MONTHS:
            return localDateTime.plusMonths(amount);
        case java.time.temporal.ChronoUnit.YEARS:
            return localDateTime.plusYears(amount);
        default:
            throw new IllegalArgumentException("無效時間類型");
    }
}
}           

以下是使用該工具類的示例代碼:

import java.util.Date;
import java.time.LocalDateTime;

public class TestDateTimeUtils {
    public static void main(String[] args) {
        // 将字元串轉換為Date類型
        Date date = DateTimeUtils.stringToDate("2023-04-27 14:23:30", "yyyy-MM-dd HH:mm:ss");
        System.out.println(date);
        
        // 将Date類型轉換為字元串
        String dateString = DateTimeUtils.dateToString(date, "yyyy-MM-dd HH:mm:ss");
        System.out.println(dateString);
        
        // 将字元串轉換為LocalDateTime類型
        LocalDateTime localDateTime = DateTimeUtils.stringToLocalDateTime("2023-04-27 14:23:30", "yyyy-MM-dd HH:mm:ss");
        System.out.println(localDateTime);
        
        // 将LocalDateTime類型轉換為字元串
        String localDateTimeString = DateTimeUtils.localDateTimeToString(localDateTime, "yyyy-MM-dd HH:mm:ss");
        System.out.println(localDateTimeString);
        
        // 将Date類型轉換為LocalDateTime類型
        LocalDateTime localDateTime2 = DateTimeUtils.dateToLocalDateTime(date);
        System.out.println(localDateTime2);
        
        // 将LocalDateTime類型轉換為Date類型
        Date date2 = DateTimeUtils.localDateTimeToDate(localDateTime2);
        System.out.println(date2);
        
        // 在Date類型日期上增加或減少指定時間
        Date date3 = DateTimeUtils.addDate(date, java.util.Calendar.DATE, 1);
        System.out.println(date3);
        
        // 在LocalDateTime類型日期上增加或減少指定時間
        LocalDateTime localDateTime3 = DateTimeUtils.addLocalDateTime(localDateTime, java.time.temporal.ChronoUnit.DAYS, 1);
        System.out.println(localDateTime3);
    }
}
           

由于目前日期是2023-04-27,是以以下是上面示例代碼的輸出結果:

手動封裝一個日期處理工具類,幾乎覆寫了所有的時間操作(收藏)

繼續閱讀