java8 Date Localdatetime instant 相互转化

本文介绍Java 8中java.util.Date新增的方法from(Instant instant)和toInstant(),并提供了从旧日期类到新日期类及反之的具体实现案例。

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

Java 8中 java.util.Date 类新增了两个方法,分别是from(Instant instant)和toInstant()方法

// Obtains an instance of Date from an Instant object.
public static Date from(Instant instant) {
    try {
        return new Date(instant.toEpochMilli());
    } catch (ArithmeticException ex) {
        throw new IllegalArgumentException(ex);
    }
}

// Converts this Date object to an Instant.
public Instant toInstant() {
    return Instant.ofEpochMilli(getTime());
}

 

这两个方法使我们可以方便的实现将旧的日期类转换为新的日期类,具体思路都是通过Instant当中介,然后通过Instant来创建LocalDateTime(这个类可以很容易获取LocalDate和LocalTime),新的日期类转旧的也是如此,将新的先转成LocalDateTime,然后获取Instant,接着转成Date,具体实现细节如下:

// 01. java.util.Date --> java.time.LocalDateTime
public void UDateToLocalDateTime() {
    java.util.Date date = new java.util.Date();
    Instant instant = date.toInstant();
    ZoneId zone = ZoneId.systemDefault();
    LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
}

// 02. java.util.Date --> java.time.LocalDate
public void UDateToLocalDate() {
    java.util.Date date = new java.util.Date();
    Instant instant = date.toInstant();
    ZoneId zone = ZoneId.systemDefault();
    LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
    LocalDate localDate = localDateTime.toLocalDate();
}

// 03. java.util.Date --> java.time.LocalTime
public void UDateToLocalTime() {
    java.util.Date date = new java.util.Date();
    Instant instant = date.toInstant();
    ZoneId zone = ZoneId.systemDefault();
    LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
    LocalTime localTime = localDateTime.toLocalTime();
}


// 04. java.time.LocalDateTime --> java.util.Date
public void LocalDateTimeToUdate() {
    LocalDateTime localDateTime = LocalDateTime.now();
    ZoneId zone = ZoneId.systemDefault();
    Instant instant = localDateTime.atZone(zone).toInstant();
    java.util.Date date = Date.from(instant);
}


// 05. java.time.LocalDate --> java.util.Date
public void LocalDateToUdate() {
    LocalDate localDate = LocalDate.now();
    ZoneId zone = ZoneId.systemDefault();
    Instant instant = localDate.atStartOfDay().atZone(zone).toInstant();
    java.util.Date date = Date.from(instant);
}

// 06. java.time.LocalTime --> java.util.Date
public void LocalTimeToUdate() {
    LocalTime localTime = LocalTime.now();
    LocalDate localDate = LocalDate.now();
    LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);
    ZoneId zone = ZoneId.systemDefault();
    Instant instant = localDateTime.atZone(zone).toInstant();
    java.util.Date date = Date.from(instant);
}

### Java 中 `Date` 换为 `LocalDateTime` 在 Java 中,可以利用 `ZonedDateTime` 和 `Instant` 来实现从 `java.util.Date` 到 `LocalDateTime` 的换。以下是具体的代码示例: ```java import java.time.LocalDateTime; import java.time.ZoneId; import java.util.Date; public class DateToLocalDateTimeExample { public static void main(String[] args) { // 假设有一个现有的 Date 对象 Date date = new Date(); // 将 Date 换为 Instant LocalDateTime localDateTime = date.toInstant() .atZone(ZoneId.systemDefault()) // 使用默认时区 .toLocalDateTime(); // 换为 LocalDateTime // 输出结果 System.out.println("Converted LocalDateTime: " + localDateTime); } } ``` 此代码片段展示了如何通过调用 `Date` 的 `toInstant()` 方法将其换为 `Instant`,随后使用系统的默认时区 (`ZoneId.systemDefault()`) 创建一个 `ZonedDateTime` 实例,并从中提取出 `LocalDateTime`[^1]。 需要注意的是,在执行此类时间操作时,默认时区的选择可能会对最终的结果产生影响。因此建议开发者明确指定所需的时区而不是依赖系统设置的默认值[^2]。 #### 关键点说明 - **`toInstant()`**: 这是从 `java.util.Date` 类型获取 `Instant` 表达形式的一种方式。 - **`ZoneId.systemDefault()`**: 提供当前 JVM 所运行的操作系统的本地时区信息。 - **`toLocalDateTime()`**: 用于从 `ZonedDateTime` 或其他带有时区的时间对象中提取不包含时区信息的部分即 `LocalDateTime`[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值