SimpleDateFormat两位年份转换为四位年份问题解决

最近博主遇到一个日期转换不符合预期的问题。

具体现象就是一个“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()方法会调用下面这么一段代码

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值