本文由作者三汪首发于简书。
今天在跑测试的时候突然发现一个获取年龄的方法没有正确返回数据,心里一惊。找出日志看了一下,报了一个UnsupportedOperationException的异常。经过Debug排查,发现竟然是toInstant()方法抛出来的异常。而且竟然抛异常的地方是java.sql.Date.toInstant。明明我用的是java.util.Date的包。百思不得其解。也许是反射的问题?如果有大佬看到此文又刚好了解各种原因,留个言探讨一下呗~
我的理解是这是jdk1.8下的bug。
解决方案是在StackOverFlow上看到的。通过Calendar做一层中转。
Date input = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(input);
LocalDate date = LocalDate.of(cal.get(Calendar.YEAR),
cal.get(Calendar.MONTH) + 1,
cal.get(Calendar.DAY_OF_MONTH));
如果你不需要转换成LocalDate而只是需要toInstant(),解决原理也是一样的。如下:
Date input = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(input);
calendar.getInstance();
以上。
希望我的文章对你能有所帮助。
我不能保证文中所有说法的百分百正确,但我能保证它们都是我的理解和感悟以及拒绝复制黏贴。
有什么意见、见解或疑惑,欢迎留言讨论。