feign date类型时间错误问题
Posted ingxx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了feign date类型时间错误问题相关的知识,希望对你有一定的参考价值。
问题
在feign传输date类型的数据时,在调用方时间正确,而被调用方获取时时间会相差14个小时。
原因
Feign客户端在进行通信时,会将Date类型对象转为String类型,如果这个时间是北京时间2019年2月19日20点30分,因为中国的时区叫做CTS,所以转化后的String为“Tue Feb 19 20:30:00 CST 2019”. 服务端将接收的String类型日期转换为Date类型,转换采用的是Date的默认构造器new Date(‘Tue Feb 19 20:30:00 CST 2019‘),这里就是错误发生的时刻,因为CTS代表的时区其实有四个(Central Standard Time (USA) UT-6:00、Central Standard Time (Australia) UT+9:30、China Standard Time UT+8:00、Cuba Standard Time UT-4:00),同时表示美国,澳大利亚,中国,古巴四个国家的标准时间。根据JavaDoc,jvm会将CTS理解成了美国中部时区,因此造成了时区错误。
JVM见到CTS默认是美国的时区(UT-6:00),与中国时区(UT+8:00)相差14个小时。
解决方法
- 使用String类型作为参数,在接收方进行类型转换
- 使用JDK8中的LocalDate
- 第三种方法增加配置类,使Feign使用自定义的规则转换
以上是关于feign date类型时间错误问题的主要内容,如果未能解决你的问题,请参考以下文章
Spring Cloud Netflix:使用 Feign 处理远程服务错误