Kotlin时间构造异常现象

本文深入探讨了Java中Date类的构造方法导致的时间偏差问题,通过对比不同构造方式,揭示了year参数需减去1900的陷阱,并对比了Date与Calendar对象在时间处理上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今日写代码用kotlin修复数据的是否,控制一个时间约束,约束记录创建时间大于2019-06-20号。

代码如下:

and(gt("createTime", Date(2019, 5, 20)))

当运行查询语句,却死活查不出数据,使用navcat查询后,发现数据库中确实存在满足约束条件的语句,于是我换了一种构造Date

的方式

and(gt("createTime", Date(1560960000000)))

再次运行之后,得到了正确的结果,此刻完全颠覆了我对Date的认知。随后打印出了Date(2019,5,20).time 输出为 61519104000000 具体是什么原因造成的呢?

另外当我使用calendar 对象获取时间时,结果时正确的

calendar.set(2019, 5, 20, 0, 0, 0) //console 1560960000366

在Date.java 这个文件中,这个Date(year,month.date,hrs,min,sec) 头部的参数注释中 year写着 减去1900,再次将构造方法参数调整为 Date(119,5,20,0,0,0) 此时约束的时间点为期望的时间点。虽然Date构造除了Date(long) 其余已被弃用,但是这个差异确实让我吃了一斤,js中的Date(year,hour,month,hrs,min,sec) year填写的2019非减去1900。到底是什么原因导致我会造成这样的预期了?预期java的Date(year,month.date) year就是公园年的数值,哎~不得而知。

以上Date 非kotlin的源码 而是Java的lang包下java.lang.Date.class 所以和Kotlin本身没有关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值