java.sql.Date 和 Calendar 的误用

很久以前发在公司内网的文章,发出来共享,隐去具体项目、人员的名字。

某天上午xxx向我反应一个yyy项目现场的问题,zzz操作失败,我告诉他数据库里有一个时间间隔参数,把它改成0就行了。
下午胡xxx又找我,说确认那个参数的确就是0,这下我也不知道原因了,只能登录服务器检查日志,没有看到有用的线索;检查源程序,程序逻辑也是对的;弄得我也很郁闷,怀疑有非检查型的异常导致程序中途退出,于是准备在程序中多打些日志看看问题在哪,这时突然发现程序中有java.sql.Date的踪影,我意识到问题出在什么地方了。
java.sql.Date对应标准sql里的Date类型,它会把时、分、秒、毫秒位置归零,除非确认程序逻辑的确要这样做,否则时间变量采用这种类型时会导致逻辑错误。
这是一个很基础的常识,但这段代码在我们的程序里存在了四年,很简单的代码如果不加注意也很容易写错,而且恰恰因为简单我们往往意识不到这种错误的存在。
以前还碰到过一个类似的问题,Calendar,我们设置或者取得“小时”,可能很自然的就使用了它定义的HOUR 这个常量,通常这是错的,因为这个常量指的是12小时制的,应该使用HOUR_OF_DAY,这是24小时制的。
使用API的时候, 如果是第一次,至少要看一遍它的javadoc,哪怕它看起来似乎一目了然。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值