最近博主遇到一个日期转换不符合预期的问题。
具体现象就是一个“17JUN38”的生日想转换为“yyyy-MM-dd”格式的日期转成了“2038-06-17”。生日比当前时间还大,明显出错了。
//当时出错的方法
private String dateSwitch(String date){ SimpleDateFormat inSdf = new SimpleDateFormat("ddMMMyy",Locale.ENGLISH); SimpleDateFormat outSdf = new SimpleDateFormat("yyyy-MM-dd"); Date paramDate = null; try { paramDate = inSdf.parse(date); } catch (ParseException e) { LOGGER.warn("",e); } return outSdf.format(paramDate); }
明明原始时间只告诉了两位年份,能给你转出四位年份都不错了!还要什么自行车!摔!
博主很生气,想跟产品理论,但是想想产品经理那40米的长刀,哎,算了我还是自己想想办法吧。
到这里肯定有小伙伴肯定想到了,既然是生日,那肯定比当前时间小,先转一下,如果时间比当前大,就减去100年呗。
这么简单的解决办法博主作为一个资深的开发能想不到么?(手动狗头)
开个玩笑,博主还是个菜鸟,主要是为什么要减去100年呢?写代码这种事情很严肃的,不能说你看到一个现象转换出错的“2038-06-17”比预期的“1938-06-17”差一百年你就得出结论。不明白的代码不能乱用,不然到时候坑人坑己(严肃脸)。所以博主去偷偷研究了一下parse的源代码。
在SimpleDateFormat的构造函数最后面,会调用initialize()方法,然后initialize()方法会调用下面这么一段代码