【精品】基于Java8的日期时间工具类

本文详细介绍了日期时间工具类的功能,包括字符串与日期时间类型的相互转换、不同日期时间类型之间的转换,以及日期时间的格式化处理。通过示例代码展示了如何使用这些工具类进行日期时间的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工具类

import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;

/**
 * 日期时间工具类
 *
 * @author hc
 */
public class DateTimeUtil {
    private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.of("+8"));
    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd").withZone(ZoneId.of("+8"));

    /**
     * 将字符串日期时间转成LocalDateTime
     *
     * @param dateTime 时间  "2016-04-04 11:50:53"
     * @return LocalDateTime
     */
    public static LocalDateTime strTime2LocalDateTime(String dateTime) {
        if (dateTime == null) {
            return null;
        }
        return LocalDateTime.parse(dateTime, DATE_TIME_FORMATTER);
    }

    /**
     * 将字符串形式的日期转换成LocalDate
     * @param date "2016-04-04"
     * @return
     */
    public static LocalDate strDate2LocalDate(String date) {
        if (date == null) {
            return null;
        }

        return LocalDate.parse(date, DATE_FORMATTER);
    }


    /**
     * 将LocalDateTime 转换成 字符串
     * @param localDateTime
     * @return
     */
    public static String localDateTime2String(LocalDateTime localDateTime) {
        if (localDateTime == null) {
            return null;
        }
        return DATE_TIME_FORMATTER.format(localDateTime);
    }

    /**
     * 将LocalDate转换成java.sql.Date
     *
     * @param date
     * @return
     */
    public static java.sql.Date localDate2SqlDate(LocalDate date) {
        if (date == null) {
            return null;
        }
        //LocalDate ---> java.util.Date
        Date tmp = localDate2Date(date);
        // java.util.Date --->java.sql.Date
        java.sql.Date sqlDate = new java.sql.Date(tmp.getTime());
        return sqlDate;
    }

    /**
     * 将LocalDateTime转换成java.sql.Date
     * @param localDateTime
     * @return
     */
    public static java.sql.Date localDateTime2SqlDate(LocalDateTime localDateTime) {
        if (localDateTime == null) {
            return null;
        }
        final Date tmp = localDateTime2Date(localDateTime);
        java.sql.Date sqlDate = new java.sql.Date(tmp.getTime());
        return sqlDate;
    }


    /**
     * date 转成 LocalDateTime
     *
     * @param date 日期
     */
    public static LocalDateTime date2LocalDateTime(Date date) {
        if (date == null) {
            return null;
        }
        Instant instant = date.toInstant();
        ZoneId zone = ZoneId.systemDefault();
        return LocalDateTime.ofInstant(instant, zone);
    }

    /**
     * java.sql.Date转LocalDateTime
     * @param sqlDate
     * @return
     */
    public static LocalDateTime sqlDate2LocalDateTime(java.sql.Date sqlDate) {
        if (sqlDate == null) {
            return null;
        }
        Date date = new Date(sqlDate.getTime());
        Instant instant = date.toInstant();
        ZoneId zone = ZoneId.systemDefault();
        return LocalDateTime.ofInstant(instant, zone);
    }

    /**
     * date 转成 LocalDate
     *
     * @param date 日期
     */
    public static LocalDate date2LocalDate(Date date) {
        if (date == null) {
            return null;
        }
        Instant instant = date.toInstant();
        ZoneId zone = ZoneId.systemDefault();
        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
        return localDateTime.toLocalDate();
    }

    /**
     * 将java.sql.Date转换成LocalDateTime
     * @param sqlDate
     * @return
     */
    public static LocalDate sqlDate2LocalDate(java.sql.Date sqlDate) {
        if (sqlDate == null) {
            return null;
        }
        Date date = new Date(sqlDate.getTime());
        Instant instant = date.toInstant();
        ZoneId zone = ZoneId.systemDefault();
        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
        return localDateTime.toLocalDate();
    }

    /**
     * date 转成 LocalTime
     *
     * @param date 日期
     */
    public static LocalTime date2LocalTime(Date date) {
        if (date == null) {
            return null;
        }
        Instant instant = date.toInstant();
        ZoneId zone = ZoneId.systemDefault();
        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
        return localDateTime.toLocalTime();
    }

    /**
     * LocalDateTime 转成 Date
     *
     * @param localDateTime 时间
     * @return 结果集
     */
    public static Date localDateTime2Date(LocalDateTime localDateTime) {
        if (localDateTime == null) {
            return null;
        }
        ZoneId zone = ZoneId.systemDefault();
        Instant instant = localDateTime.atZone(zone).toInstant();
        return Date.from(instant);
    }

    /**
     * localDate 转成 Date
     *
     * @param localDate 结果集
     */
    public static Date localDate2Date(LocalDate localDate) {
        if (localDate == null) {
            return null;
        }
        ZoneId zone = ZoneId.systemDefault();
        Instant instant = localDate.atStartOfDay().atZone(zone).toInstant();
        return Date.from(instant);
    }

    /**
     * LocalTime 转成 Date
     *
     * @param localDate 时间
     * @param localTime 本地时间
     */
    public static Date localTime2Date(LocalDate localDate, LocalTime localTime) {
        if (localTime == null) {
            return null;
        }
        LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);
        ZoneId zone = ZoneId.systemDefault();
        Instant instant = localDateTime.atZone(zone).toInstant();
        return Date.from(instant);
    }

    public static Date parse(String source) {
        if (source == null || source.length() == 0) {
            return null;
        }
        source = source.trim();
        if (source.matches("^\\d{4}-\\d{1,2}$")) {
            return parseDate(source, "yyyy-MM");
        } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")) {
            return parseDate(source, "yyyy-MM-dd");
        } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")) {
            return parseDate(source, "yyyy-MM-dd HH:mm");
        } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")) {
            return parseDate(source, "yyyy-MM-dd HH:mm:ss");
        } else {
            throw new IllegalArgumentException("Invalid false value '" + source + "'");
        }
    }

    /**
     * 格式化日期
     * @param dateStr String 字符型日期
     * @param format String 格式
     * @return Date 日期
     */
    private static Date parseDate(String dateStr, String format) {
        if (dateStr == null || format == null || dateStr.length() == 0 || format.length() == 0) {
            return null;
        }
        Date date;
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            date = sdf.parse(dateStr);
        } catch (Exception e) {
            throw new IllegalArgumentException(e.getLocalizedMessage());
        }
        return date;
    }

}

测试代码

public static void main(String[] args) {
    System.out.println(parse("2000-12"));
    System.out.println(parse("2000-12-12"));
    System.out.println(parse("2000-12-12 12:12"));
    System.out.println(parse("2000-12-12 12:12:12"));

    final Date utilDate = new Date();
    System.out.println(date2LocalDate(utilDate));

    final java.sql.Date sqlDate = new java.sql.Date(24131241324L);
    System.out.println(sqlDate2LocalDate(sqlDate));

    final java.sql.Date sqlDate = new java.sql.Date(3243144143L);
    System.out.println(sqlDate2LocalDateTime(sqlDate));

    java.sql.Date sqlDate = new java.sql.Date(34124132L);
    System.out.println(sqlDate);
    java.util.Date utilDate = new java.util.Date();
    System.out.println(utilDate);

    子类赋值给父类
            utilDate = sqlDate;
    System.out.println(utilDate);
    //父类赋值给子类
    sqlDate = (java.sql.Date) utilDate;
    System.out.println(sqlDate);
    sqlDate = new java.sql.Date(utilDate.getTime());
    System.out.println(sqlDate);
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梁云亮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值