SpringCloud Feign 时间问题

问题描述

有这样的一种场景,就是 A 系统调用 B 系统。B 打一个 jar 包供 A 系统调用。B 系统里有一个参数是 Date 格式,它的上面有一个时间格式控制 @JsonFormat(pattern = “yyyy-MM-dd”)。我们会发现,在某些特殊的时间里面,B 系统接受到的时间和 A 系统传递的时间不一致。比如 A 系传递的是 1990-09-04。到 B 系统的时候,你解析会发现得到的时间是 1990-09-03。

问题原因

我国解放前几年在部分地区也曾实行过夏令时。1986 年 4 月,中央有关部门发出 “在全国范围内实行夏时制的通知”,具体作法是:每年从四月中旬第一个星期日的凌晨 2 时整(北京时间),将时钟拨快一小时,即将表针由 2 时拨至 3 时,夏令时开始;到九月中旬第一个星期日的凌晨 2 时整(北京夏令时),再将时钟拨回一小时,即将表针由 2 时拨至 1 时,夏令时结束。从 1986 年到 1991 年的六个年度,除 1986 年因是实行夏时制的第一年,从5 月 4 日开始到 9 月14 日结束外,其它年份均按规定的时段施行。1992 年起,夏令时暂停实行。

Feign 里面在序列化的时候,会考虑时令的东西,将这段期间里面的部分时间转换错误。

解决方案

  1. 简单粗暴,将时间设置为 string 类型。
  2. jDK8 版本及以后版本可以考虑使用 LocalDate 类型。