练着练着发现每次要往数据库中存时间变量时,Java那边就不知道怎么优雅地处理时间类型了,因为从表单中接收的值好像都是string类型的,虽说不是没有方法吧,但总感觉每次都特不优雅,所记录总结一下,方便以后优雅地使用~哈哈哈
都直接写成一个方法了,可以直接拿去用
JDBC:
Situation1:DB存Datetime类型
1、表单接收时为string,对应的实体类相关属性类型也是string(但是一般都要求实体类跟数据库中的字段类型相对应)(一般推荐)
存数据库时,从表单中获取的时间格式一定要正确,然后将string转为util.Date存入就行(Java中正常不导包的情况下是没有datetime类型的,所以转成util.Date类型就行,一样可以是2023-11-18 19:20:20这样的数据)
String转util.Date:
public void StringToDate(String time) {//time就是你需要转换的时间字符串,格式一定要跟下面匹配!
//这里的time就是形如2023-11-18 19:20:20,可以与yyyy-MM-dd HH:mm:ss匹配的格式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
try {
date = simpleDateFormat.parse(time);// 转为Date
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(date); // Sat Nov 18 19:20:20 CST 2023
}
从数据库中查询的date数据也需要转换一下,才能正确显示到前端。
查询就正常使用getDate就行,然后util.Date转String:
public String DateToString(Date date) {
// 设置日期格式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
String format = simpleDateFormat.format(date);
return format;
}
2、表单接收时为string,对应的实体类相关属性类型是Date
接收之后转为util.Date类型:
public Date StringToDate(String time) {//time就是你需要转换的时间字符串,格式一定要跟下面匹配!
//这里的time就是形如2023-11-18 19:20:20,可以与yyyy-MM-dd HH:mm:ss匹配的格式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
try {
date = simpleDateFormat.parse(time);// 转为Date
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(date); // Sat Nov 18 19:20:20 CST 2023
return date;
}
存入数据库的时候一定注意,一般使用的都是util包下面的Date,但是sql是要求使用sql包下面的Date,所以需要注意导包和转换一下
- 存入当前时间:
public Date saveDate() {
Date date = new Date(new java.util.Date().getTime());
// 设置日期格式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");//这里的形式也可以是yyyy-MM-dd HH:mm:ss
String format = simpleDateFormat.format(date);
return date;
}
- 需要存入自定义时间:思路其实也就是String->util.Date->sql.Date
public java.sql.Date saveCustomDate(String dateString) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
java.sql.Date sqlDate = null;// 这里是sql包中的Date,不要new Date()了,会报错的TT
try {
java.util.Date date = simpleDateFormat.parse(dateString);//String先转成util下的Date
sqlDate = new java.sql.Date(date.getTime());//util.Date再转成sqlDate
return sqlDate;
} catch (ParseException e) {
e.printStackTrace();
return null;
}
}
3、表单接收时为string,对应的实体类相关属性类型是Timestamp(最完美)
存入数据库时可以直接setTimestamp
- 存入当前时间:
Timestamp ts = new Timestamp(System.currentTimeMillis());
然后直接存setTimestamp(这里写数据库中时间的字段号,ts)就行
- 存入自定义时间:本质还是string->util.Date->Timestamp
从表单接收到的string调用一下StringToDate方法(上面有)
public static Timestamp StringToTimestamp(String dateString) {
//法一:先转util.Date再转timestamp
Date date = StringToDate("2023-11-11 19:20:20");
Timestamp ts = new Timestamp(date.getTime());
//法二:直接使用timestamp的valueOf方法
//Timestamp timestamp = Timestamp.valueOf("2023-11-11 19:20:20");
return ts;
}
然后在Dao中setTimestamp(这里写数据库中时间的字段号,ts)就行
从数据库中获取时间:
直接使用resultSet的方法getTimestamp();,之后转换为string:
public static String TimestampToString(Timestamp stamp) {
String dateString = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(stamp);
return dateString;
}
Stuation2:DB中存Date类型
跟DB中存Datetime类型差不多
Spring:直接注解 @Date 就可以解决所有问题,只要数据库和实体类中都是Date类型
先这么写着,之后再来详细总结hhh