导包

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

以下是转化代码

一、Date转LocalDateTime

    public static LocalDateTime toLocalDateTime(Date date) {
        // 方法一
        LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
        // 方法二
        return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
    }

二、LocalDateTime转Date

    public static Date toDate(LocalDateTime localDateTime) {
        return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
    }

三、时间字符串转LocalDateTime

    /**
     * date string to LocalDateTime
     * @param dateStr eg: "2020-08-22 10:30:50"
     * @param pattern eg: "yyyy-MM-dd HH:mm:ss"
     * @return LocalDateTime
     */
    public static LocalDateTime toLocalDateTime(String dateStr, String pattern) {
        return LocalDateTime.parse(dateStr, DateTimeFormatter.ofPattern(pattern));
    }

四、LocalDateTime转时间字符串

    public static String localDateTimeToStr(LocalDateTime dateTime, String pattern) {
        if (dateTime == null) {
            return null;
        }

        return dateTime.format(DateTimeFormatter.ofPattern(StrUtil.isBlank(pattern) ? "yyyy-MM-dd HH:mm:ss" : pattern));
    }

五、Date转OffsetDateTime

    public static OffsetDateTime toOffsetDateTime(Date date) {
        // 方法一
        OffsetDateTime offsetDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toOffsetDateTime();
        // 方法二
        return ZonedDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()).toOffsetDateTime();
    }
    
    // 测试
    public static void test(){
        OffsetDateTime offsetDateTime = toOffsetDateTime(new Date());
        // 当前最后时间 23:59:59
        OffsetDateTime with = offsetDateTime.with(LocalTime.MAX);
        // 当前开始时间 00:00:00
        OffsetDateTime  endDateTime = offsetDateTime.with(LocalTime.MIN);
    }

六、OffsetDateTime转Date

  public static Date toDate(OffsetDateTime offsetDateTime){
        return Date.from(offsetDateTime.atZoneSameInstant(ZoneId.systemDefault()).toInstant());
    }

七、OffsetDateTime转LocalDateTime

    public static LocalDateTime toLocalDateTime(OffsetDateTime offsetDateTime) {
        return LocalDateTime.ofInstant(offsetDateTime.atZoneSameInstant(ZoneId.systemDefault()).toInstant(), ZoneId.systemDefault());
    }

八、获取整点时间

    /**
     * 获取整点时间 示例:2020-10-28 10:18:32 返回 2020-10-28 10:00:00
     * @param date the date
     * @return the hour date time
     */
    public static Date getHour(Date date) {
        LocalDateTime dateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
        return Date.from(LocalDateTime.of(dateTime.toLocalDate(), LocalTime.of(dateTime.getHour(), 0, 0)).atZone(ZoneId.systemDefault()).toInstant());
    }

九、LocalDateTime 转 时间戳(秒级)

@Test
    public void localTimeTest1(){
        // 获得当前时间
        LocalDateTime localDateTime = LocalDateTime.now();
        // 将当前时间转为时间戳
        long second = localDateTime.toEpochSecond(ZoneOffset.ofHours(8));
        System.out.println(second);

    }
@Test
    public void localTimeTest2(){
        // 获得当前时间
        LocalDateTime localDateTime = LocalDateTime.now();
        // 将当前时间转为时间戳
        long second = localDateTime.toInstant(ZoneOffset.ofHours(8)).getEpochSecond();
        System.out.println(second);

    }
    public void localTimeTest3() {
        // 获得当前时间
        LocalDateTime localDateTime = LocalDateTime.now();
        // 将当前时间转为时间戳
        long milliseconds = localDateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
        System.out.println(milliseconds / 1000);
    }

十、时间戳 转LocalDateTime

    public void localTimeTest4() {
        //获得时间戳
        long second = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).getEpochSecond();
        // 将时间戳转为当前时间
        LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(second, 0, ZoneOffset.ofHours(8));
        System.out.println(localDateTime);
    }
    public void localTimeTest5() {
        //获得时间戳
        long milliseconds = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
        // 将时间戳转为当前时间
        LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(milliseconds / 1000, 0, ZoneOffset.ofHours(8));
        System.out.println(localDateTime);
    }
    public void localTimeTest6(){
        //获得时间戳
        long milliseconds = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
        // 将时间戳转为当前时间
        LocalDateTime localDateTime = Instant.ofEpochMilli(milliseconds).atZone(ZoneOffset.ofHours(8)).toLocalDateTime();
        System.out.println(localDateTime);
    }

十一、时间戳与LocalDate互转

1.时间戳转LocalDate

    public void localDateTest1(){
        //获得时间戳
        long milliseconds = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
        // 将时间戳转为当前时间
        LocalDate localDate = Instant.ofEpochMilli(milliseconds).atZone(ZoneOffset.ofHours(8)).toLocalDate();
        System.out.println(localDate);
    }
    public void localDateTest2(){
        //获得时间戳
        long seconds = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).getEpochSecond();
        // 将时间戳转为当前时间
        LocalDate localDate = Instant.ofEpochSecond(seconds).atZone(ZoneOffset.ofHours(8)).toLocalDate();
        System.out.println(localDate);
    }

2.LocalDate 转 时间戳

    public void localDateTest3(){
        LocalDate localDate = LocalDate.now();
        //获得时间戳
        long seconds = localDate.atStartOfDay(ZoneOffset.ofHours(8)).toInstant().getEpochSecond();
        System.out.println(seconds);
    }
    public void localDateTest4(){
        LocalDate localDate = LocalDate.now();
        //获得时间戳
        long seconds = localDate.atStartOfDay(ZoneOffset.ofHours(8)).toInstant().toEpochMilli();
        System.out.println(seconds);
    }

十二、时间格式化输出

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
	private Date time1;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
	private LocalDateTime time2;

备注

1、LocalDateTime可以做日期的加减很方便
2、OffsetDateTime计算00:00:00及23:59:59很方便

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐