使用System.currentTimeMillis()计算当前时间,一般使用如下语句: long totalSeconds = System.currentTimeMillis() / 1000; //获取unix时间戳至今的秒数long currentSeconds = totalSeconds % 60;//获取当前秒数long currentMinutes = totalSeconds / 60 % 60;//获取当前分钟数long currentHours = totalSeconds / 3600 % 24;//获取当前小时数
计算出来分钟数和秒数都是对的,小时数却发生了错误,这是怎么回事呢?
首先要做的是排除算法本身的问题,当然如果你使用如上的代码,算法上是不会有问题的。 那么问题出在哪呢?其实很简单。 学过地理的都有印象,世界各国使用的时间是以格林尼治天文台的时间为基准的,在这个基础上,各地区的时间是不同的。在实际操作中,以时区进行划分,我国采用北京所在的东八区时间。大家可能会在某些地方见到过“北京时间(GMT+8)”这样的写法,这就是说在格林尼治时间基础上要加8小时,才是我们日常使用的北京时间。而System.currentTimeMillis()获取的是UNIX时间戳至今的格林尼治时间数,用它计算出来的时间当然是GMT时间,分钟数、秒数都是正确的,而小时数会少8小时。 当我们把这8小时的值加进去之后,再运行,就会发现时间显示正确了。
完整代码如下:long totalSeconds = System.currentTimeMillis() / 1000; //获取unix时间戳至今的秒数long currentSeconds = totalSeconds % 60;//获取当前秒数long currentMinutes = totalSeconds / 60 % 60;//获取当前分钟数long currentHours = totalSeconds / 3600 % 24 + 8;//获取当前小时数