这种问题应该算是很初级的问题了,项目一直用的是util包下的date,所以临时看了一下sql.date的源码:
由源码,很容易可以看出来,sql.date提供了两种构造方法:
一、 提供年月日
@Deprecated
public Date(int year, int month, int day) {
super(year, month, day);
}
该方法调用的是util下date包的父构造方法。
二、提供时间戳(1970-01-01 00:00:00 起至目标日期的秒数,详情请参考时间戳_百度百科)
public Date(long date) {
// If the millisecond date value contains time info, mask it out.
super(date);
}
同上。
所以这个对象本身不支持传入字符串进行转换。
第二个现象 :去掉“”后,报错。
去掉“”后,你的2018-08-08,‘-’被认为是运算符减号。那么这个程序会被认为是 2018减08减08。一般正常情况下,08是非法的,因为0开头表示八进制数字,而八进制里面没有8。
当然,如果你去掉了零,或者用某些间接写法。那么系统会自动运算成 2002 。这时候,符合第二种构造方法(int 会被强转成long类型)。得出来的结果是1970-01-01(sql.date类型没有时分秒)
emmm,再补一句,个人不推荐用sql.date类型表示时间,它是util.date的子类,其实你完全可以用util.sql。。。
就酱,没啦~
问题比较简单,程序实例就不贴了。有问题可以留言。