Java LocalDate 转 Instant 和 Timestamp
在这一页,我们将提供如何将
java.time.LocalDate
转换成
java.time.Instant
和
java.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
转换为Instant
和Timestamp
的例子。
1. LocalDate 转 Instant
为了将LocalDate
转换为Instant
,我们将LocalDate
转换成ZonedDateTime
或Timestamp
,然后调用它们的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