Java8 日期类LocalDate和Date互转


前言

目前接触的很多项目中基本都是使用JDK8及以上的Java版本开发。自JDK8提供了新的日期类:LocalTime、LocalDate 和 LocalDateTime,项目中经常出现旧的日期类Date和新版本日期类混合使用的情况,往往需要定制化实现日期类的转换。所以本文将做一次整理,将日期类之间常见的日期转换实现,封装成工具类,方便日后的项目开发。


代码实现

封装项目统一的日期工具类,代码如下(示例):

import java.sql.Timestamp;
import java.time.*;
import java.util.Date;

/**
 * <p>
 * LocalDate and LocalDateTime tools
 * </p>
 */
public class LocalDateUtils {

    private LocalDateUtils() {
    }

    /**
     * Date to LocalDate
     *
     * @param date 日期
     * @return {@link LocalDate}
     */
    public static LocalDate covert2LocalDate(Date date) {
        return Instant.ofEpochMilli(date.getTime())
                .atZone(ZoneId.systemDefault())
                .toLocalDate();
    }

    /**
     * Date to LocalTime
     *
     * @param date 日期
     * @return {@link LocalTime}
     */
    public static LocalTime covert2LocalTime(Date date) {
        return Instant.ofEpochMilli(date.getTime())
                .atZone(ZoneId.systemDefault())
                .toLocalTime();
    }

    /**
     * Date to LocalDateTime
     *
     * @param date 日期
     * @return {@link LocalDateTime}
     */
    public static LocalDateTime covert2LocalDateTime(Date date) {
        return Instant.ofEpochMilli(date.getTime())
                .atZone(ZoneId.systemDefault())
                .toLocalDateTime();
    }

    /**
     * milliseconds to LocalDateTime
     *
     * @param milliseconds milliseconds since January 1, 1970, 00:00:00 GMT.
     * @return {@link LocalDateTime}
     */
    public static LocalDateTime covert2LocalDateTime(long milliseconds) {
        return new Timestamp(milliseconds).toLocalDateTime();
    }

    /**
     * LocalDate to Date, init time at start of day
     *
     * @param date 日期
     * @return {@link Date}
     */
    public static Date covert2Date(LocalDate date) {
        return Date.from(date.atStartOfDay()
                .atZone(ZoneId.systemDefault())
                .toInstant());
    }

    /**
     * LocalTime to Date, init date on January 1, 1970
     *
     * @param date 日期
     * @return {@link Date}
     */
    public static Date covert2Date(LocalTime date) {
        return Date.from(date.atDate(LocalDate.of(1970, 1, 1))
                .atZone(ZoneId.systemDefault())
                .toInstant());
    }

    /**
     * LocalDateTime to Date
     *
     * @param date 日期
     * @return {@link Date}
     */
    public static Date covert2Date(LocalDateTime date) {
        return Date.from(date.atZone(ZoneId.systemDefault())
                .toInstant());
    }

    /**
     * LocalDateTime to milliseconds
     *
     * @param date 日期
     * @return {@link Date}
     */
    public static long covert2Milliseconds(LocalDateTime date) {
        Instant instant = date.atZone(ZoneId.systemDefault()).toInstant();
        return instant.toEpochMilli();
    }

    /**
     * LocalDate to milliseconds
     *
     * @param date 日期
     * @return {@link Date}
     */
    public static long covert2Milliseconds(LocalDate date) {
        Instant instant = date.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant();
        return instant.toEpochMilli();
    }

    /**
     * LocalDateTime to seconds
     *
     * @param date 日期
     * @return {@link Date}
     */
    public static long covert2Seconds(LocalDateTime date) {
        Instant instant = date.atZone(ZoneId.systemDefault()).toInstant();
        return instant.getEpochSecond();
    }

    /**
     * LocalDate to seconds
     *
     * @param date 日期
     * @return {@link Date}
     */
    public static long covert2Seconds(LocalDate date) {
        Instant instant = date.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant();
        return instant.getEpochSecond();
    }

}


总结

以上就是Java8中日期类之间互转的内容,本文仅仅简单介绍了常用的时间戳、Date与LocalDate、LocalDateTime之间的转换,实际项目中可以根据需要,参考转换方法自定义更多转换实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值