java.sql.Date和java.util.Date区别及使用
两个Date类型之间的联系
java.sql.Date继承自 java.util.Date,是对util.Date的一个简化,用于数据库使用,只包含年月日,不包含时分秒。
java.sql.Date
构造方法:
- @param year the year minus 1900; must be 0 to 8099. (Note that
8099 is 9999 minus 1900.)
@param month 0 to 11
@param day 1 to 31
public Date(int year, int month, int day) {
super(year, month, day);
};
year 参数值为:当前年—1900 的差值
month 参数值: 范围 0—11 ,所以构造值为当前月 —1 - public Date(long date) {
// If the millisecond date value contains time info, mask it out.
super(date);
}
如果long date值包含时分秒,会被忽略。日期中只包含年月日。
类方法解析
1.public void setTime(long date) {
// If the millisecond date value contains time info, mask it out.
super.setTime(date);
}
设置新的年月日, 如果long date值包含时分秒,会被忽略。
2.public static Date valueOf(String s) {}
将日期格式的string转换成Date类型
String格式仅支持yyyy-MM-dd以-号分隔的字符串。
3. public String toString () {}
@return a String in yyyy-mm-dd format
4.public static Date valueOf(LocalDate date) {
return new Date(date.getYear() - 1900, date.getMonthValue() -1,
date.getDayOfMonth());
}
根据localDate中的时分秒创建sql.date对象.
jdk1.8新增类 java.time.LocalDate 新的日期处理类,提供对日期的相关操作方法,类是final声明的有利于线程安全,也只包含年月日。 时分秒操作则是 java.time.localtimestamp
5.public LocalDate toLocalDate() {
return LocalDate.of(getYear() + 1900, getMonth() + 1, getDate());
}
转换成localDate对象,底层调用localDate构造方法 会校验日期是否正确
总结
java.sql.Date 用于数据库使用只有年月日,数据库操作需要使用时分秒则使用java.sql.timestamp
java.util.Date 用于程序内部运行使用