首先我们看一下代码:
//获取秒数 gmt+8
Long second8 = LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8"));
//获取毫秒数 gmt+8
Long milliSecond8 = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
//获取秒数 gmt+0
Long second0 = LocalDateTime.now().toEpochSecond(ZoneOffset.of("+0"));
//获取毫秒数 gmt+0
Long milliSecond0 = LocalDateTime.now().toInstant(ZoneOffset.of("+0")).toEpochMilli();
//获取秒数 currentTimeMillis
long totalMilliSeconds = System.currentTimeMillis();
System.out.println("+8 second: " + second8);
System.out.println("+8 milliSecond: " + milliSecond8);
System.out.println("+0 seconds: " + second0);
System.out.println("+0 milliSeconds:" + milliSecond0);
//显示时间
System.out.println("+s seconds: " + totalMilliSeconds);
输出:
+8 second: 1579417649
+8 milliSecond: 1579417649553
+0 seconds: 1579446449
+0 milliSeconds:1579446449553
+s seconds: 1579417649553
结论:
System.currentTimeMillis() 获取的是返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。
当前计算机时间是跟你的计算机所在时区是有关的!!!
比如我的电脑是在中国时区,获取的时间,和如果代码发布到azure这样的服务器,获得的时间会有8小时差别!
因此,当使用此方法,生成jwt签名时,和签名过期时间判定时,都要十分注意带来的影响!