在网上看到有网友说自己最近在和印度的SP在核对统计数据的过程中,发现统计的数据存在时区的问题。本文主要是就以上问题作出的解决。他给对方提供的接口获取指定date的统计结果,是按照中国的时区来控制的。庆幸的是在数据库中存储的是国际时间戳,因此只需要在接口处确定调用方是哪个时区的即可获取正确的统计结果信息。
解决方案参考如下,即在SimpleDateFormat对象基础上需要明确当前需要使用的时区是什么。
SimpleDateFormat.setTimeZone(TimeZone);
// Java: long timeMs = System.currentTimeMillis(); System.out.println("long = " + timeMs); // current time zone SimpleDateFormat default = new SimpleDateFormat("yyyy-MM-dd HH:mm"); System.out.println(default.format(timeMs)); // +8:00 time zone SimpleDateFormat chinaFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); chinaFormat.setTimeZone(TimeZone.getTimeZone("GMT+8:00")); System.out.println("GMT+8:00 = " + chinaFormat.format(timeMs)); // +5:30 time zone SimpleDateFormat indiaFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); indiaFormat.setTimeZone(TimeZone.getTimeZone("GMT+5:30")); System.out.println("GMT+5:30 = " + indiaFormat.format(timeMs));
使用如上方法其实就可以解决时区问题,由于我当时获取统计数据是通过小时表获取的且小时表是一小时一条记录。而印度时区为GMT+5:30,在当前表结构的基础上会存在半小时数据偏差的问题,因此为了解决该问题我们修改小时表的统计粒度为半小时。
总结:
该博客只是简单的说出重点的解决时区的方案,在使用该方案的前提是数据库中存储的是国际时间戳!!!
只有基于绝对时间戳的时间存储,从根本上就没有时区的问题!!!时区只是一个显示问题!!!
每天进步一点点~
【推荐课程:MySQL视频教程】
以上是对于MySQL在保存时间信息上的建议的详细内容。更多信息请关注PHP中文网其他相关文章!