时区问题导致时间相差8个小时

问题描述

系统平台查询车辆轨迹数据分为两种方式:页面查询方式、对外接口方式

 

通过页面查询方式显示的数据定位时间是符合实际情况的,而通过对外接口查询的数据定位时间却比实际时间早了八个小时

 

解决方案

通过分析两个后端接口业务逻辑代码,发现底层调用的是同一段代码,即说明从数据库中查询出的数据是一致的

而这两段业务逻辑的区别在于对时间戳的解析:

  • 平台页面是将时间戳传递给前端,让前端解析
  • 后端对外接口是直接解析完再返回

故结合实际车辆运行情况,定位问题为后端对外接口的时间戳解析函数有问题

 

// 原业务解析函数
// resp.setGpstime(DateFormatUtils.format(dp.getCurrenttime(),"yyyy-MM-dd HH:mm:ss"));

// 设置中国上海时区 
resp.setGpstime(DateFormatUtils.format(dp.getCurrenttime(),"yyyy-MM-dd HH:mm:ss", TimeZone.getTimeZone("Asia/Shanghai")));

// 设置美国纽约时区(比中国早12个小时)
//  resp.setGpstime(DateFormatUtils.format(dp.getCurrenttime(),"yyyy-MM-dd HH:mm:ss", TimeZone.getTimeZone("America/New_York")));

// 设置英国伦敦时区 (比中国早8个小时)
//  resp.setGpstime(DateFormatUtils.format(dp.getCurrenttime(),"yyyy-MM-dd HH:mm:ss", TimeZone.getTimeZone("Europe/London")));
  

 

对于时间早(晚)8小时问题一般解决思路

  • 查询服务器时间是否准确
  • 查询Docker容器时间是否准确
  • 业务代码中相关函数时区问题
posted @ 2024-03-14 09:47  先娶国王后取经  阅读(27)  评论(0编辑  收藏  举报