java Date 如何转成LocalDate和LocalTime,LocalDateTime

在Java中,java.util.Date 代表了自“the epoch”(即1970年1月1日 00:00:00 GMT)以来的毫秒数。而java.time包(Java 8及以后版本)中的LocalDateLocalTimeLocalDateTime则提供了更为丰富和直观的日期时间API。

要将java.util.Date转换为LocalDateLocalTimeLocalDateTime,可以使用java.time.Instant类作为中间桥梁,因为Instant类可以表示时间线上的一个瞬时点,与java.util.Date有相似的用途(尽管Instant是以UTC表示的,而Date是相对于默认时区的)。

Date 转 LocalDate

import java.util.Date;  
import java.time.LocalDate;  
import java.time.Instant;  
import java.time.ZoneId;  
  
public class DateToLocalDate {  
    public static void main(String[] args) {  
        Date date = new Date(); // 获取当前日期时间  
  
        // 转换为Instant  
        Instant instant = date.toInstant();  
  
        // 转换为LocalDate,需要指定时区,因为LocalDate不包含时区信息  
        // 这里使用系统默认时区  
        LocalDate localDate = instant.atZone(ZoneId.systemDefault()).toLocalDate();  
  
        System.out.println("LocalDate: " + localDate);  
    }  
}

Date 转 LocalTime

import java.util.Date;  
import java.time.LocalTime;  
import java.time.Instant;  
import java.time.ZoneId;  
  
public class DateToLocalTime {  
    public static void main(String[] args) {  
        Date date = new Date(); // 获取当前日期时间  
  
        // 转换为Instant  
        Instant instant = date.toInstant();  
  
        // 转换为LocalTime,需要指定时区  
        LocalTime localTime = instant.atZone(ZoneId.systemDefault()).toLocalTime();  
  
        System.out.println("LocalTime: " + localTime);  
    }  
}

Date 转 LocalDateTime

import java.util.Date;  
import java.time.LocalDateTime;  
import java.time.Instant;  
import java.time.ZoneId;  
  
public class DateToLocalDateTime {  
    public static void main(String[] args) {  
        Date date = new Date(); // 获取当前日期时间  
  
        // 转换为Instant  
        Instant instant = date.toInstant();  
  
        // 转换为LocalDateTime,需要指定时区  
        LocalDateTime localDateTime = instant.atZone(ZoneId.systemDefault()).toLocalDateTime();  
  
        System.out.println("LocalDateTime: " + localDateTime);  
    }  
}

在上述示例中,首先将java.util.Date对象转换为java.time.Instant,然后通过atZone(ZoneId.systemDefault())方法将其转换为特定时区(这里是系统默认时区)的ZonedDateTime对象。由于LocalDateLocalTimeLocalDateTime都是时区无关的(对于LocalDateTime来说,它实际上是“本地”的,不包含时区信息,但在这里通过指定时区来从Instant获取它),最后通过调用.toLocalDate().toLocalTime().toLocalDateTime()方法将它们从ZonedDateTime中提取出来。

注意,在转换过程中,需要指定一个时区,因为java.util.Date本身并不包含时区信息,它只是自epoch以来的毫秒数。因此,在转换为LocalDateLocalTimeLocalDateTime时,需要明确想要哪个时区的日期或时间。如果想要的是UTC时间,你可以使用ZoneId.of("UTC")代替ZoneId.systemDefault()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值