Java - System.currentTimeMillis() 是否和时区有关?

首先我们看一下代码:

        //获取秒数 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签名时,和签名过期时间判定时,都要十分注意带来的影响!

猜你喜欢

转载自blog.csdn.net/qq_26878363/article/details/104040935