今天导入订单时发现一只报错,token获取失败,token获取需要传参数当前时间撮timestamp,要求我传的和接口系统获取的不能超过6分钟,我传的是201912301119,接口那边一直报异常,说我的时间异常,debug后发现,那边获取当前时间成了202012301119,奇怪了,两边获取当前时间怎么正好相差一年呢?
仔细比较才发现,原来是两边的获取当前时间后的格式化不同造成的,我这边是:
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");
而服务器那边是:
SimpleDateFormat sdf = new SimpleDateFormat("YYYYMMddHHmm");
就是一个字母Y的大小写区别,来来来,我们本地写个main方法测试一下:
小写y:
大写Y:
看到没有,格式化时,大写Y和小写y刚好相差一年,下面说一下具体原因:
y 是Year, Y 表示的是Week year
经过试验:Week year 意思是当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年。
我现在刚好是2019-12-30 本周刚好跨年,所以出现了上面的额情况,导致今天的程序一直报错,所以我们在开发过程中遇到时间格式化的最好就用小写的yyyy,虽然一年遇到一次,但还是幸运的遇到了,希望能给大家带来帮助。