本文将提供在 Java LocalDate
和 epoch 之间转换的示例。Epoch是用作特定历法时代起源的时间瞬间。Epoch是测量时间的参考点。 LocalDate
的历元参考点是 1970-01-01,格式为 YYYY-MM-DD。当我们将诸如 2019-11-15 这样的 LocalDate
转换为Epoch天数时,结果将是从 1970-01-01 到 2019-11-15 的天数。同理,当我们将 18215 等Epoch天数转换为 LocalDate
时,将通过将 18215 天数与 1970-01-01 相加得到结果 LocalDate
。
1. 使用 LocalDate.toEpochDay()
找到将 LocalDate
转换为Epoch日的代码片段。
long numberOfDays = localDate.toEpochDay();
2. 使用 LocalDate.ofEpochDay()
找到将Epoch天数转换为 LocalDate
的代码片段。
LocalDate localDate = LocalDate.ofEpochDay(numberOfDays);
现在详细找到在 Java LocalDate
和 epoch 之间转换的示例。
将 LocalDate
转换为Epoch天数是从 1970-01-01 到给定本地日期的天数计算。将 LocalDate
转换为Epoch秒或毫秒是从 1970-01-01T00:00:00Z 开始到给定本地日期的时间计算。
LocalDateToEpoch.java
package com.concretepage;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
public class LocalDateToEpoch {
public static void main(String[] args) {
//Epoch reference of date is 1970-01-01
LocalDate localDate = LocalDate.parse("2019-11-15");
//LocalDate to epoch days
long numberOfDays = localDate.toEpochDay();
System.out.println(numberOfDays);
//LocalDate to epoch seconds
long timeInSeconds = localDate.toEpochSecond(LocalTime.NOON, ZoneOffset.MIN);
System.out.println(timeInSeconds);
//LocalDate to epoch milliseconds
Instant instant = localDate.atStartOfDay(ZoneId.systemDefault()).toInstant();
long timeInMillis = instant.toEpochMilli();
System.out.println(timeInMillis);
instant = localDate.atTime(LocalTime.MIDNIGHT).atZone(ZoneId.systemDefault()).toInstant();
timeInMillis = instant.toEpochMilli();
System.out.println(timeInMillis);
}
}
输出
18215
1573884000
1573756200000
1573756200000
LocalDate
提供 toEpochDay()
方法将本地日期转换为Epoch日。找到 Java 文档。
long toEpochDay()
toEpochDay()
将此日期转换为Epoch日。 toEpochDay()
计算从 1970-01-01 到给定本地日期的天数。如果给定的本地日期是 1970-01-01,则Epoch天数将为 0。
LocalDate localDate = LocalDate.parse("2019-11-15");
long numberOfDays = localDate.toEpochDay();
在 Java 9 中,LocalDate
提供了 toEpochSecond()
方法来将本地日期转换为Epoch秒。找到 Java 文档。
long toEpochSecond(LocalTime time, ZoneOffset offset)
toEpochSecond()
将此 LocalDate
转换为自Epoch 1970-01-01T00:00:00Z 以来的秒数。 LocalDate
与给定的时间和区域偏移相结合,以计算从 1970-01-01T00:00:00Z 开始的秒数。
long timeInSeconds = localDate.toEpochSecond(LocalTime.NOON, ZoneOffset.MIN);
要将 LocalDate
转换为Epoch毫秒,我们可以使用 Instant.toEpochMilli()
将此时刻转换为Epoch 1970-01-01T00:00:00Z 的毫秒数。要获得Epoch毫秒,首先我们将 LocalDate
转换为 Instant
,然后使用其 toEpochMilli()
方法。
Instant instant = localDate.atStartOfDay(ZoneId.systemDefault()).toInstant();
long timeInMillis = instant.toEpochMilli();
instant = localDate.atTime(LocalTime.MIDNIGHT).atZone(ZoneId.systemDefault()).toInstant();
timeInMillis = instant.toEpochMilli();
通过将给定时间添加到 1970-01-01T00:00:00Z,将给定的Epoch天数、Epoch秒数或Epoch毫秒数转换为 LocalDate
。找到代码。
EpochToLocalDate.java
package com.concretepage;
import java.sql.Timestamp;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
public class EpochToLocalDate {
public static void main(String[] args) {
//Epoch reference of date is 1970-01-01
long numberOfDays = 18215;
LocalDate localDate = LocalDate.ofEpochDay(numberOfDays);
System.out.println(localDate);
//Using Instant
long timeInSeconds = 1567109422L;
localDate = LocalDate.ofInstant(Instant.ofEpochSecond(timeInSeconds), ZoneId.systemDefault());
System.out.println(localDate);
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochSecond(timeInSeconds), ZoneId.systemDefault());
localDate = localDateTime.toLocalDate();
System.out.println(localDate);
long timeInMillis = 1567109422123L;
localDate = LocalDate.ofInstant(Instant.ofEpochMilli(timeInMillis), ZoneId.systemDefault());
System.out.println(localDate);
//Using Timestamp
localDate = new Timestamp(timeInMillis).toLocalDateTime().toLocalDate();
System.out.println(localDate);
}
}
输出
2019-11-15
2019-08-30
2019-08-30
2019-08-30
2019-08-30
LocalDate.ofEpochDay()
通过将天数添加到 1970-01-01 来获得 LocalDate
的实例。找到 Java 文档。
static LocalDate ofEpochDay(long epochDay)
找到代码片段。
LocalDate localDate = LocalDate.ofEpochDay(numberOfDays);
Java 9 LocalDate.ofInstant()
接受 Instant
和区域 id 并返回 LocalDate
对象。找到 Java 文档。
static LocalDate ofInstant(Instant instant, ZoneId zone)
Instant
提供了以下方法来处理 epoch。
1. 以下方法使用 1970-01-01T00:00:00Z Epoch的秒数获取 Instant
的实例。
static Instant ofEpochSecond(long epochSecond)
找到代码片段。
localDate = LocalDate.ofInstant(Instant.ofEpochSecond(timeInSeconds), ZoneId.systemDefault());
2. 以下方法使用 1970-01-01T00:00:00Z Epoch的毫秒数获取 Instant
的实例。
static Instant ofEpochMilli(long epochMilli)
找到代码片段。
localDate = LocalDate.ofInstant(Instant.ofEpochMilli(timeInMillis), ZoneId.systemDefault());
我们可以使用 LocalDateTime.toLocalDate()
方法将 LocalDateTime
转换为 LocalDate
。
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochSecond(timeInSeconds), ZoneId.systemDefault());
localDate = localDateTime.toLocalDate();
找到 java.sql.Timestamp
构造函数。
public Timestamp(long time)
这将使用自 1970-01-01T00:00:00Z 以来的毫秒时间值构造一个 Timestamp
对象。
找到代码片段。
localDate = new Timestamp(timeInMillis).toLocalDateTime().toLocalDate();
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.concretepage.com/java/java-8/convert-between-java-localdate-epoch
内容来源于网络,如有侵权,请联系作者删除!