最近遇到一个问题,数据库字段为datetime,前端form表单直接展示过后保存入库,结果日期自己变化了,要么日期增加了一天,要么小时增加了两小时。
通过request.getParamater("createDate")获取到的参数和springBoot自己封装的createDate(java Date类型)后的参数不相等。
request.getParamater("createDate")获取到的值是和前端相同,是正确的。因此讲问题定位为springBoot参数转换为Date类型时出错。
解决办法:自定义一个参数日期转换器
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter;
/**
* 自定义传入日期转换器
* 用以解决前端提交时间数据,后台date字段接收转换不准确的问题
*/
@Configuration
public class DateConverConfig {
@Bean
public Converter<String, Date> stringDateConvert() {
return new Converter<String, Date>() {
@Override
public Date convert(String source) {
//yyyy-MM-dd HH:mm:ss日期字符串转换为Date类型
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = null;
try {
date = sdf.parse((String) source);
} catch (Exception e) {
//yyyy-MM-dd日期字符串转换为Date类型
sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
date = sdf.parse((String) source);
} catch (ParseException e1) {
//EEE MMM dd HH:mm:ss Z yyyy字符串转换为Date类型
sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", Locale.UK);
try {
date = sdf.parse((String) source);
} catch (ParseException e2) {
e2.printStackTrace();
}
}
}
return date;
}
};
}
}这样就能解决日期变化的问题。
如果有更好的解决办法,或者是本文有不对之处,敬请批评指正!
【四川乐山程序员联盟,欢迎大家加群相互交流学习5 7 1 8 1 4 7 4 3】
2万+

被折叠的 条评论
为什么被折叠?



