Java日期时间Date和LocalDateTime的转换

2023/06/26 Java 共 3203 字,约 10 分钟
技术的搬运工

Java中日期时间Date和LocalDateTime的转换,以及其他日期时间的操作。

Java日期时间处理工具类

import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Date;

/**
 * @author hmfdev.space
 * @create 2023/06/26
 * 各种时间日期格式的转换,主要是 LocalDateTime 和 Date 的互相转换
 */
public class DateUtils {

    /**
     * 将 java.util.Date 转换为 java 8 的 java.time.LocalDateTime,默认时区为东八区
     */
    public static LocalDateTime dateConvertToLocalDateTime(Date date) { // Date -> LocalDateTime
        return date.toInstant().atOffset(ZoneOffset.of("+8")).toLocalDateTime();
    }

    /**
     * 将 java 8 的 java.time.LocalDateTime 转换为 java.util.Date,默认时区为东八区
     */
    public static Date localDateTimeConvertToDate(LocalDateTime localDateTime) { // LocalDateTime -> Date
        return Date.from(localDateTime.toInstant(ZoneOffset.of("+8")));
    }

    /**
     * 将 LocalDateTime 转为 自定义的时间格式的字符串
     * @param localDateTime 入参如:LocalDateTime.now()
     * @param format        入参如:"yyyy-MM-dd HH:mm"(输出字符串日期的格式)
     */
    public static String getDateTimeAsString(LocalDateTime localDateTime, String format) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
        return localDateTime.format(formatter);
    }

    /**
     * 将 某时间字符串 转为 自定义时间格式的 LocalDateTime
     * @param time
     * @param format
     */
    public static LocalDateTime parseStringToDateTime(String time, String format) {
        DateTimeFormatter df = DateTimeFormatter.ofPattern(format);
        return LocalDateTime.parse(time, df);
    }

    /**
     * 将 Long 类型的 timestamp 转为 LocalDateTime
     * @param timestamp
     */
    public static LocalDateTime getDateTimeOfTimestamp(Long timestamp) {
        Instant instant = Instant.ofEpochMilli(timestamp);
        ZoneId zone = ZoneId.systemDefault();
        return LocalDateTime.ofInstant(instant, zone);
    }

    /**
     * 将 LocalDateTime 转为 Long 类型的 timestamp
     * @param localDateTime
     */
    public static Long getTimestampOfDateTime(LocalDateTime localDateTime) {
        ZoneId zone = ZoneId.systemDefault();
        Instant instant = localDateTime.atZone(zone).toInstant();
        return instant.toEpochMilli();
    }


    //  main() 函数
    public static void main(String[] args) {
    
        Date date = new Date();  // Mon Jun 26 10:24:35 CST 2023
        LocalDateTime localDateTime = LocalDateTime.now();  // 2023-06-26T11:11:35.735

        System.out.println("date: " + date);
        System.out.println("localDateTime: " + localDateTime);

        System.out.println(DateUtils.dateConvertToLocalDateTime(new Date()));
        System.out.println(DateUtils.localDateTimeConvertToDate(LocalDateTime.now()));

        // LocalDateTime 获取 秒数、毫秒数
        // 获取秒数
        Long second = LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8"));
        System.out.println(second); // 1687748691

        // 获取毫秒数
        Long milliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
        System.out.println(milliSecond); // 1687748691012

        System.out.println("--------------------------------------");

        // LocalDateTime 与 String 互转
        // 时间 转 字符串
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");
        String dateTime = LocalDateTime.now(ZoneOffset.of("+8")).format(formatter);
        System.out.println(dateTime); // 20230626110451041

        // 字符串 转 时间
        String dateTimeStr = "2023-06-26 11:06:26";
        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime dateTime1 = LocalDateTime.parse(dateTimeStr, df);
        System.out.println(dateTime1); // 2023-06-26T11:06:26

        System.out.println(DateUtils.getDateTimeAsString(LocalDateTime.now(), "yyyy-MM-dd HH:mm")); // 2023-06-26 14:26
    }
}

输出

date: Mon Jun 26 10:24:35 CST 2023
localDateTime: 2023-06-26T11:11:35.735
2023-06-26T11:11:35.735
Mon Jun 26 10:24:35 CST 2023
1687748691
1687748691012
--------------------------------------
20230626110451041
2023-06-26T11:06:26
2023-06-26 14:26

文档信息