Java8 Instant 时间戳

Posted 可小辉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java8 Instant 时间戳相关的知识,希望对你有一定的参考价值。

在java.util.Date类与LocalDate、LocalDateTime类之间转换中 均可以通过Instant作为中间类完成转换,Instant的使用还是比较方便的,下面介绍Instant的使用。

1、创建Instant实例

Instant now = Instant.now();
System.out.println("now:"+now);

控制台输出:

now:2022-01-10T06:13:19.713Z

注意:

通过这种方式获取的时间戳与北京时间相差8个时区,需要修正为北京时间,通过查看源代码发现Instant.now()使用等是UTC时间Clock.systemUTC().instant()。

LocalDate、LocalDateTime 的now()方法使用的是系统默认时区,不存在Instant.now()的时间问题。

###解决方法
增加8个小时 

Instant now = Instant.now().plusMillis(TimeUnit.HOURS.toMillis(8));
System.out.println("now:"+now);

控制台输出:

now:2022-01-10T14:18:11.408Z

2、Instant获取long类型的10位秒数、13位毫秒数

Instant now = Instant.now().plusMillis(TimeUnit.HOURS.toMillis(8));
System.out.println("秒数:"+now.getEpochSecond());
System.out.println("毫秒数:"+now.toEpochMilli());

控制台输出:

秒数:1641824531
毫秒数:1641824531573

LocalDateTime输出毫秒数的方式,比Instant多一步转换

LocalDateTime localDateTime = LocalDateTime.now();
        //LocalDateTime转Instant
        Instant localDateTime2Instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
        System.out.println("LocalDateTime 毫秒数:"+localDateTime2Instant.toEpochMilli());

以上是关于Java8 Instant 时间戳的主要内容,如果未能解决你的问题,请参考以下文章

Java8 时间API

Jackson 将 ISO8601 格式的日期时间反序列化为 Java8 Instant

java8及8之前日期相关类

将毫秒时间戳反序列化为 java.time.Instant

Java 8中的时间处理

Java 8中的时间处理