最近在做项目的时候出现了一个让人头痛的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了。
记录下,不要在犯了!!!!
版权声明:本文为My_Jack原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。