现象
从数据库读取出来的日期后面多了个.0,如:
2018-11-17 01:02:00.0
原因
因为数据库的字段设置为timestamp类型。(如果设置为Date类型的话,就不会报这种错误了)
解决
通过SimpleDateFormat类来进行转换
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = fmt.parse(user.getTime());//将数据库出的 timestamp 类型的时间转换为java的Date类型
String s = fmt.format(date);
到这里我们就已经解决了这个问题。
封装成工具类
实际工作中,建议将这个操作封装成一个工具类,避免重复的书写代码。
下面提供我项目中封装的工具类
/**
* @author hungteshun
* @description:
* @date 2018/11/17 16:36
*/
public class DateUtils {
public static final String FORMATTER_MINUTE = "yyyy-MM-dd HH:mm";
public static final String FORMATTER_SECOND = "yyyy-MM-dd HH:mm:ss";
public static final String FORMATTER_MILLISECOND = "yyyy-MM-dd HH:mm:ss.SSS";
private static Pattern PATTERN_REGEX_MINUTE = Pattern.compile("^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}$");
private static Pattern PATTERN_REGEX_SECOND = Pattern.compile("^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$");
private static Pattern PATTERN_REGEX_MILLISECOND = Pattern.compile("^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}\\.\\d{3}$");
public static Date parse(String dateTimeStr) throws ParseException {
String formatter = "";
if (TextValidator.isMatch(PATTERN_REGEX_MINUTE, dateTimeStr)) {
formatter = FORMATTER_MINUTE;
} else if (TextValidator.isMatch(PATTERN_REGEX_SECOND, dateTimeStr)) {
formatter = FORMATTER_SECOND;
} else if (TextValidator.isMatch(PATTERN_REGEX_MILLISECOND, dateTimeStr)) {
formatter = FORMATTER_MILLISECOND;
}
if (StringUtils.isNotBlank(formatter)) {
return parse(dateTimeStr, formatter);
} else {
return null;
}
}
public static Date parse(String dateTimeStr, String formatter) throws ParseException {
Date dateTime = null;
if (StringUtils.isNotBlank(dateTimeStr)) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(formatter);
dateTime = simpleDateFormat.parse(dateTimeStr);
}
return dateTime;
}
public static String format(Date date) {
return format(date, FORMATTER_SECOND);
}
public static String format(Date date, String formatter) {
String result = "";
if (date != null) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(formatter);
result = simpleDateFormat.format(date);
}
return result;
}
}