一、问题
一个case,本地跑没有任何问题,但一布到jenkins上,就会报错,错误的内容是实际返回的时间与断言里的预期时间差了8个小时
二、分析问题
怀疑是时区问题,因为与开发调接口时没有发现问题,怀疑与jenkins服务器上设置的时区相关,经查本地跑的接口时CST时区,但从jenkins上跑出来的是UTC时区。
检查我们的case,发现通过jenkins运行,在传date类型的参数时,落库的时候时间就出现了8小时的问题,我们传的date类型的参数,是通过时间戳转成的date,问题可能就出现在这个时间戳转date的方法中。
经检查我们的beanShell发现,方法中没有设置默认时区,都是按照我们本地的时区来的,我们本地的时区恰好与开发人员服务器的时区一致,所以本地运行没有出现问题,但在jenkins上运行的时候,jenkins上服务器的时区是UTC时区,所以出现了本地运行和在jenkins上运行时间差8小时的问题
三、解决方案
在时间戳转date的方法上设置默认时区
四、思考与总结
1.以往接口参数一般都是传时间戳,第一次遇到传date类型,以后接口设计是否应传时间戳更加合适一些?
2.涉及到date类型,需考虑时区问题
3.时间戳和时区。
时间戳:
时间不分东西南北、在地球的每一个角落都是相同的。他们都有一个相同的名字,叫时间戳。时间戳 指的就是Unix时间戳(Unix timestamp)。定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。
时区:
时间戳 在地球的每一个角落都是相同的,但是在相同的时间点会有不同的表达方式,所以有了另外一个时间概念,叫时区。这里的时区与地区不是同一个概念,例如我们所在的时区叫 东八区