Date转LocalDate时,调用toInstant()报UnsupportedOperationException异常的解决方式。

本文由作者三汪首发于简书。


今天在跑测试的时候突然发现一个获取年龄的方法没有正确返回数据,心里一惊。找出日志看了一下,报了一个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();

以上。
希望我的文章对你能有所帮助。
我不能保证文中所有说法的百分百正确,但我能保证它们都是我的理解和感悟以及拒绝复制黏贴。
有什么意见、见解或疑惑,欢迎留言讨论。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Java 语言支持的类型分为两类:基本类型和引用类型。整型(byte 1, short 2, int 4, lon...
    xiaogmail阅读 1,369评论 0 10
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,540评论 25 708
  • 六种异常处理的陋习 你觉得自己是一个Java专家吗?是否肯定自己已经全面掌握了Java的异常处理机制?在下面这段代...
    Executing阅读 1,367评论 0 6
  • 一年四季,我最喜欢秋色。 秋天的绿色,没有了年轻稚嫩的清翠,没有了蓬勃舞动的延展。时光将绿色的颜料泼洒出深深浅浅,...
    CharlotteCC的印记阅读 268评论 0 1
  • 心雨 夜末雨中寻归处, 暗天无月路难行。 树下坐泣还程远, 空望飞鷰两归巢。 日升梦醒金光曌, 残影已...
    Jason丶阅读 275评论 0 2