Java8 LocalDateTime 时间戳 Instant ZoneOffset

1.时间戳定义

首先我们要先了解时间戳的定义,Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
即北京时间要比格林威治时间多8个小时
unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。[1]
Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp)
是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
UNIX时间戳的0按照ISO 8601规范为 :1970-01-01T00:00:00Z.
一个小时表示为UNIX时间戳格式为:3600秒;一天表示为UNIX时间戳为86400秒,闰秒不计算。
在大多数的UNIX系统中UNIX时间戳存储为32位,这样会引发2038年问题或Y2038。

2.Instant定义

Instant表示的永远是0时区的时间线。

LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
System.out.println("############################");
Instant now = Instant.now();
System.out.println(now + "####" + now.toEpochMilli());

打印结果:

2021-07-29T11:26:24.983
############################
2021-07-29T03:26:25.001Z####1627529185001

所以用Instant.toEpochMilli()算出来的时间戳,永远都是当前时间-0时区1970年00:00:00

3.理解:

3.1 localDateTime.toInstant(ZoneOffset.of(“+8”)).toEpochMilli()到底怎么来理解?

1.localDateTime.toInstant(ZoneOffset.of(“+8”))先将localDateTime转换成0时区时间,而ZoneOffset表示偏移量,在这里表示localDateTime比0时区偏移了+8个小时,所以localDateTime转换成0时区的时候,就是A(0时区时间)= B(localDateTime)-8小时
2.toEpochMilli()再将得到的0时区时间转换成时间戳,即A(0时区时间)-0时区1970年00:00:00 = 0时区时间戳

4.测试:

public static void main(String[] args) {
    LocalDateTime localDateTime = LocalDateTime.now();
    System.out.println(localDateTime);
    System.out.println(localDateTime.toInstant(ZoneOffset.of("-8")) + "####" + localDateTime.toInstant(ZoneOffset.of("-8")).toEpochMilli());
    System.out.println(localDateTime.toInstant(ZoneOffset.of("+0")) + "####" + localDateTime.toInstant(ZoneOffset.of("+0")).toEpochMilli());
    System.out.println(localDateTime.toInstant(ZoneOffset.of("+8")) + "####" + localDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli());
}

打印:

2021-07-29T12:10:19.685
2021-07-29T20:10:19.685Z####1627589419685
2021-07-29T12:10:19.685Z####1627560619685
2021-07-29T04:10:19.685Z####1627531819685
  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值