DateUtil.java 2.43 KB
package com.viontech.keliu.utils;

import org.springframework.util.StringUtils;

import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.Optional;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class DateUtil {
    private static final DateTimeFormatter YYYYMMDD_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd").withZone(ZoneId.of("Asia/Shanghai"));
    private static final DateTimeFormatter YYYYMMDD_FORMATTER2 = DateTimeFormatter.ofPattern("yyyyMMdd").withZone(ZoneId.of("Asia/Shanghai"));
    private static final DateTimeFormatter YYYYMMDDHHMM_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm").withZone(ZoneId.of("Asia/Shanghai"));
    // 正则表达式匹配8位连续数字(YYYYMMDD格式)
    private static final Pattern YYYYMMDD_PATTERN = Pattern.compile("(\\d{8})");

    /**
     *
     * @param dateTime
     * @return 返回日期格式: yyyy-MM-dd
     */
    public static String formatYYYYMMDD(LocalDateTime dateTime) {
        if (null == dateTime) {
            return null;
        }
        return dateTime.format(YYYYMMDD_FORMATTER);
    }

    /**
     *
     * @param dateTime
     * @return 返回日期格式: yyyy-MM-dd HH:mm
     */
    public static String formatYYYYMMDDHHMM(LocalDateTime dateTime) {
        if (null == dateTime) {
            return null;
        }
        return dateTime.format(YYYYMMDDHHMM_FORMATTER);
    }

    /**
     * 通用日期格式化
     * @param date
     * @param format
     * @return
     */
    public static String format(Date date, String format) {
        if (null == date || StringUtils.isEmpty(format)) {
            return null;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.format(date);
    }

    /**
     * 从字符串中提取日期(YYYYMMDD)
     * @param input 输入字符串
     * @return 包含日期的Optional对象(为空表示未找到或格式无效)
     */
    public static LocalDate extractDate(String input) {
        try {
            Matcher matcher = YYYYMMDD_PATTERN.matcher(input);
            if (matcher.find()) {
                String dateStr = matcher.group(1);
                return Optional.of(LocalDate.parse(dateStr, YYYYMMDD_FORMATTER2)).get();
            }
        } catch (Exception e) {
        }
        return null;
    }
}