Java8 DateTime与1582历法问题

事情经过

今天下午在研究mybatis对jsr310的支持, 跟往常一样我准备了一个MySQL测试用的数据表, 里面有些DATETIME列, 默认值是’0000-01-01 00:00:00’, 映射Java类中的create_time等这样的java.time.OffsetDateTime属性.

当我测试的时候我就整个蒙圈了, 某些字段插入我是用OffsetDateTime.now()指定, 这些数据取出来的时候完整无误, 存的时间多少他取出来就是多少, 如2017-03-08T16:14:52+08:00. 但是当我不设置该值, 选用数据库的默认值的时候, 一返回我就傻了, 0001-01-01T00:05:43+08:05:43, 这个偏移值真的是闻所未闻… 考虑过Docker MySQL镜像时间的同步问题, 甚至还开始怀疑是不是JDK8有BUG了.

于是乎丫的我就直接开始调试, 直到抓到一条线索, MyBatis从数据库取出至封装至Java Bean的途中, 调用了一个java.sql.Timestamp.from(Instant)函数, 就是这个函数调用出了问题. 测试之后真的是让我大开眼界.

System.out.println(Timestamp.from(DEFAULT_TIME.toInstant()));
System.out.println(Timestamp.from(OffsetDateTime.of(1582, 10, 14, 23, 59, 59, <
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值