【Java 8 新特性】Java LocalDate 转 Instant 和 Timestamp

这篇博客详细介绍了如何在Java中将LocalDate转换为Instant和Timestamp,包括LocalDate.atTime、LocalDate.atStartOfDay和LocalDateTime.of等方法的使用,并提供了完整的示例代码。此外,还展示了Timestamp到Instant的转换过程。

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


在这一页,我们将提供如何将 java.time.LocalDate转换成 java.time.Instantjava.sql.Timestamp

LocalDate代表一个格式为yyyy-MM-dd的日期,如2019-05-16

Instant是时间线上的一个瞬时点。

Timestamp是一个围绕java.util.Date的薄包装,允许JDBC API将其识别为一个SQL TIMESTAMP值。

1.找到将LocalDate转换为Instant的示例代码。

LocalDate localDate = LocalDate.parse("2019-05-16");
Instant instant = localDate.atStartOfDay(ZoneId.systemDefault()).toInstant();
System.out.println(instant);//2019-05-15T18:30:00Z 

2.找到将LocalDate转换为Timestamp的示例代码。

LocalDate localDate = LocalDate.parse("2019-05-16");
Timestamp timestamp = Timestamp.valueOf(localDate.atTime(LocalTime.MIDNIGHT));
System.out.println(timestamp); //2019-05-16 00:00:00.0 

下面我们将介绍更多将LocalDate转换为InstantTimestamp的例子。

1. LocalDate 转 Instant

为了将LocalDate转换为Instant,我们将LocalDate转换成ZonedDateTimeTimestamp,然后调用它们的toInstant()方法,我们得到Instant

1.1 使用 LocalDate.atTime

LocalDate.atTime方法将该日期与给定的时间相结合,创建一个LocalDateTime

LocalDateTime.atZone将这个日期时间(date-time)与一个时区(time-zone)结合起来,创建一个ZonedDateTime

ZonedDateTime.toInstant将这个日期时间(date-time)转换为Instant

例:

LocalDate localDate = LocalDate.parse("2019-05-16");
Instant instant = localDate.atTime(LocalTime.MIDNIGHT).atZone(ZoneId.systemDefault()).toInstant();
System.out.println(instant); //2019-05-15T18:30:00Z 

1.2. 使用 LocalDate.atStartOfDay

例1:LocalDate.atStartOfDay(zone)根据时区(time-zone)的规则,返回从该日期开始的最早有效时间的分区日期时间(date-time)。

LocalDate localDate = LocalDate.parse("2019-05-16");
Instant instant = localDate.atStartOfDay(ZoneId.systemDefault()).toInstant();
System.out.println(instant);//2019-05-15T18:30:00Z 

例2:LocalDate.atStartOfDay()将这个日期与午夜的时间结合起来,在这个日期的开始创建一个LocalDateTime

LocalDate localDate = LocalDate.parse("2019-05-16");
Instant instant = localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant();
System.out.println(instant); //2019-05-15T18:30:00Z 

1.3. 使用 LocalDateTime.of

LocalDateTime.of从一个日期和时间获得一个LocalDateTime的实例。

例:

LocalDate localDate = LocalDate.parse("2019-05-16");
Instant instant = LocalDateTime.of(localDate, LocalTime.MIDNIGHT).atZone(ZoneId.systemDefault()).toInstant();
System.out.println(instant); //2019-05-15T18:30:00Z 

2. LocalDate 转 Timestamp

Timestamp.valueOf(dateTime)LocalDateTime对象中获得一个Timestamp的实例。

**例1:**使用LocalDate.atTime方法对LocalDateTime进行实例化。

LocalDate localDate = LocalDate.parse("2019-05-16");
Timestamp timestamp = Timestamp.valueOf(localDate.atTime(LocalTime.MIDNIGHT));
System.out.println(timestamp); //2019-05-16 00:00:00.0 

**例2:**使用LocalDateTime.of方法对LocalDateTime进行实例化。

LocalDate localDate = LocalDate.parse("2019-05-16");
Timestamp timestamp = Timestamp.valueOf(LocalDateTime.of(localDate, LocalTime.MIDNIGHT));
System.out.println(timestamp); //2019-05-16 00:00:00.0 

3. Timestamp 转 Instant

我们可以使用Timestamp.toInstant()方法将Timestamp转换为Instant

例:

LocalDate localDate = LocalDate.parse("2019-05-16");
Timestamp timestamp = Timestamp.valueOf(LocalDateTime.of(localDate, LocalTime.MIDNIGHT));
Instant	instant = timestamp.toInstant();
System.out.println(instant); //2019-05-15T18:30:00Z 

完整示例

LocalDateDemo.java

import java.sql.Timestamp;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
public class LocalDateDemo {
  public static void main(String[] args) {
	LocalDate localDate = LocalDate.parse("2019-05-16");

	System.out.println("---Instant---");
	Instant instant = localDate.atTime(LocalTime.MIDNIGHT).atZone(ZoneId.systemDefault()).toInstant();
	System.out.println(instant);

	instant = localDate.atStartOfDay(ZoneId.systemDefault()).toInstant();
	System.out.println(instant);

	instant = localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant();
	System.out.println(instant);

	instant = LocalDateTime.of(localDate, LocalTime.MIDNIGHT).atZone(ZoneId.systemDefault()).toInstant();
	System.out.println(instant);
	
	System.out.println("---Timestamp---");
	Timestamp timestamp = Timestamp.valueOf(localDate.atTime(LocalTime.MIDNIGHT));
	System.out.println(timestamp);

	timestamp = Timestamp.valueOf(LocalDateTime.of(localDate, LocalTime.MIDNIGHT));
	System.out.println(timestamp);

	System.out.println("---Timestamp to Instant---");	
	instant = timestamp.toInstant();
	System.out.println(instant);
  }
} 

输出

---Instant---
2019-05-15T18:30:00Z
2019-05-15T18:30:00Z
2019-05-15T18:30:00Z
2019-05-15T18:30:00Z
---Timestamp---
2019-05-16 00:00:00.0
2019-05-16 00:00:00.0
---Timestamp to Instant---
2019-05-15T18:30:00Z 

参考文献

【1】Java LocalDate
【2】Java DateTimeFormatter
【3】Java LocalDate to Date
【4】Java LocalDate to Instant and Timestamp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫巳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值