本文将提供在 Java LocalDateTime
和Epoch之间转换的示例。Epoch是用作特定历法时代起源的时间瞬间。Epoch是测量时间的参考点。 LocalDateTime
的Epoch参考点是 UTC 中的 1970-01-01T00:00:00Z。当我们将本地日期时间(例如 2019-11-15T13:15:30)转换为纪元秒时,结果将是从 1970-01-01T00:00:00Z 到 2019-11-15T13:15 的时间间隔(以秒为单位) :30。同样,当我们将 epoch 秒数(例如 1567109422)转换为 LocalDateTime
时,将通过将 1567109422 秒数与 1970-01-01T00:00:00Z 相加得到结果 LocalDateTime
。
1. 找到使用 LocalDateTime.toEpochSecond()
将 LocalDateTime
转换为Epoch的代码片段。
long timeInSeconds = localDateTime.toEpochSecond(ZoneOffset.UTC);
2. 找到使用 LocalDateTime.ofEpochSecond()
将Epoch转换为 LocalDateTime
的代码片段。
LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(timeInSeconds, 0, ZoneOffset.UTC);
现在详细找到在 Java LocalDateTime
和Epoch之间转换的示例。
将 LocalDateTime
转换为Epoch秒或毫秒是从 1970-01-01T00:00:00Z 开始到给定本地日期时间的时间计算。如下代码。
LocalDateTimeToEpoch.java
package com.concretepage;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
public class LocalDateTimeToEpoch {
public static void main(String[] args) {
//1970-01-01T00:00:00Z
LocalDateTime localDateTime = LocalDateTime.parse("2019-11-15T13:15:30");
//LocalDateTime to epoch seconds
long timeInSeconds = localDateTime.toEpochSecond(ZoneOffset.UTC);
System.out.println(timeInSeconds);
//LocalDateTime to epoch milliseconds
Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
long timeInMillis = instant.toEpochMilli();
System.out.println(timeInMillis);
}
}
输出
1573823730
1573803930000
LocalDateTime
提供 toEpochSecond()
方法将本地日期时间转换为Epoch秒。
long toEpochSecond(ZoneOffset offset)
toEpochSecond()
结合这个本地日期时间和指定的偏移量来计算Epoch秒值。 toEpochSecond()
计算从 1970-01-01T00:00:00Z 到给定本地日期时间的秒数。
long timeInSeconds = localDateTime.toEpochSecond(ZoneOffset.UTC);
要将 LocalDateTime
转换为Epoch毫秒,我们可以使用 Instant.toEpochMilli()
将这一时刻转换为从 1970-01-01T00:00:00Z Epoch开始的毫秒数。为了获得Epoch毫秒,首先我们将 LocalDateTime
转换为 Instant
,然后使用它的 toEpochMilli()
方法。
Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
long timeInMillis = instant.toEpochMilli();
通过将给定时间添加到 1970-01-01T00:00:00Z 将给定的Epoch秒或毫秒转换为 LocalDateTime
。如下代码。
EpochToLocalDateTime.java
package com.concretepage;
import java.sql.Timestamp;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
public class EpochToLocalDateTime {
public static void main(String[] args) {
//Epoch point of time is 1970-01-01T00:00:00Z
long timeInSeconds = 1567109422L;
//Using LocalDateTime.ofEpochSecond
LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(timeInSeconds, 0, ZoneOffset.UTC);
System.out.println(localDateTime);
//Using Instant
localDateTime = LocalDateTime.ofInstant(Instant.ofEpochSecond(timeInSeconds), ZoneId.systemDefault());
System.out.println(localDateTime);
localDateTime = LocalDateTime.ofInstant(Instant.ofEpochSecond(timeInSeconds, 0), ZoneId.systemDefault());
System.out.println(localDateTime);
long timeInMillis = 1567109422123L;
localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(timeInMillis), ZoneId.systemDefault());
System.out.println(localDateTime);
//Using Timestamp
localDateTime = new Timestamp(timeInMillis).toLocalDateTime();
System.out.println(localDateTime);
}
}
输出
2019-08-29T20:10:22
2019-08-30T01:40:22
2019-08-30T01:40:22
2019-08-30T01:40:22.123
2019-08-30T01:40:22.123
LocalDateTime.ofEpochSecond()
使用 1970-01-01T00:00:00Z Epoch的秒数获取 LocalDateTime
的实例。如下Java代码:
static LocalDateTime ofEpochSecond(long epochSecond, int nanoOfSecond, ZoneOffset offset)
如下代码片段
LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(timeInSeconds, 0, ZoneOffset.UTC);
Instant
提供以下方法来处理Epoch时间。
1. 此方法使用 1970-01-01T00:00:00Z Epoch的秒数获取 Instant
的实例。
static Instant ofEpochSecond(long epochSecond)
如下代码片段。
localDateTime = LocalDateTime.ofInstant(Instant.ofEpochSecond(timeInSeconds), ZoneId.systemDefault());
2. 此方法使用 1970-01-01T00:00:00Z Epoch的秒数和秒的纳秒小数部分获取 Instant
的实例。
static Instant ofEpochSecond(long epochSecond, long nanoAdjustment)
如下代码片段。
localDateTime = LocalDateTime.ofInstant(Instant.ofEpochSecond(timeInSeconds, 0), ZoneId.systemDefault());
3. 此方法使用 1970-01-01T00:00:00Z Epoch的毫秒数获取 Instant
的实例。
static Instant ofEpochMilli(long epochMilli)
如下代码片段。
localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(timeInMillis), ZoneId.systemDefault());
找到 java.sql.Timestamp
构造函数。
public Timestamp(long time)
这将使用自 1970-01-01T00:00:00Z 以来的毫秒时间值构造一个 Timestamp
对象。
如下代码片段。
localDateTime = new Timestamp(timeInMillis).toLocalDateTime();
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.concretepage.com/java/java-8/convert-between-java-localdatetime-epoch
内容来源于网络,如有侵权,请联系作者删除!