Windows和Linux下的Java Date的坑

最近在做项目的时候出现了一个让人头痛的bug,现在记录下:

环境:开发:Windows   线上:CentOS

问题再现:

  获取当前月份的上月。比如当前月份为七月(2019-07),而我想通过Date类获得六月(2019-06)。而我在自己开发环境(Windows)下的操作:

Date curDate = DateUtils.stringToDate(DateUtils.format(new Date(), "yyyy-MM", "yyyy-MM");
//获取当前年月
String curTime = DateUtils.format(new Date(), "yyyy-MM");

//获取上月份
Date oldStartDate = new DateTime(curDate).plusMonths(-1).toDate();

//将Date转String
String oldStartTime = DateUtils.format(oldStartDate, "yyyy-MM");

最后oldStartTime的值为2019-06  这个在Windows上测试无数遍没有问题。

但是在CentOs上,oldStartTime的值就变成了2019-05。这个真的是让人一时想不到问题,主要是这不会造成程序出问题,只会导致根据时间查询出来的数据是不匹配的。最后只能是通过日志发现这个问题了。

问题分析:

第一反应,不可能。第二反应,又是系统的问题,这样其实就好排查了。最终问题是出在这一行代码了 

 


//获取上月份
Date oldStartDate = new DateTime(curDate).plusMonths(-1).toDate();

这个curDate被我截取为“yyyy-mm”的格式了,在Windows环境下不影响Date函数的加减,但是在Linux环境下就不行了。所以把curDate =new Date();

就ok了。

记录下,不要在犯了!!!!

 

你可能感兴趣的:(Java)