在当年大二选修课的时候就遇到了这个问题,是时间戳转换成时间的时候,如果是自己来计算则会少了8个小时。一直不知道为啥,我们今天就再来算一算,最后我们在说说为啥。
Date date = new Date();
// 获取当前的时间戳·单位毫秒·21时15分32秒
long nowTime = date.getTime();输出时间戳:这个时间戳的单位是毫秒。

在这里我们是根本看不出来是为啥的。接下来我们来一个一个的计算。
毫秒换算成秒
long second = nowTime / 1000;换算成当前秒
long seconds = second % 60;换算成当前分钟
long minutes = second / 60 % 60;换算成小时
long hours = minutes / 60 % 24;我们可以获取到:

很明显,我们计算的小时是有问题的,这个时间戳的时间是:【21时15分32秒】。可是时间换算完毕是13时,很明显21-13=8,相差8个小时,这个时候我们就很懵逼,咋回事呢?
我记得很早以前,我还只会VB语言的时候就遇到过这个问题。后来老师说,咱们是东八区我一下就明白了。
原来我们在东八区,所以我们的地区时应该在这个时间戳的基础上加上8个小时就对了。故而有以下代码:
package com.item.action;
import java.util.Date;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
// Date date = new Date();
// // 获取当前的时间戳·单位毫秒
// long nowTime = date.getTime();
// System.out.println(nowTime);
long nowTime = 1676985332143l;
// 获取秒
long second = nowTime / 1000;
System.out.println(second + "s");
// 获取分钟
long seconds = second % 60;
System.out.println(seconds + "s");
long minutes = second / 60;
System.out.println(minutes % 60 + "min");
// 获取小时
long hours = minutes / 60 % 24 + 8;
System.out.println(hours + "h");
System.out.println(hours+"时"+(minutes % 60)+"分"+seconds+"秒");
}
}输出效果:

补上8个小时就是正确的时间了,这个类型题在蓝桥杯上也是出现过的,大家可以搜一搜,前三题,那个题目我倒是忘记了。