我一直在寻找答案,但没有运气,我有一个数据保存在 MySQL 表中作为
java.util.Date
像这样 2023-01-30
我想做的是检索那个日期并将其格式化为 dd/MM/yyyy
,意思是当我检索日期时应该返回我30/01/2023
我的桌子:
id | 姓名 | 发布日期 |
---|---|---|
1 | 教父 | 2023-01-30 |
2 | 好的坏的丑的 | 2023-01-30 |
这是我的课:
public record Movie(Integer id,
String name,
List<Actor> actors,
Date releaseDate) {
}
这是我搜索特定日期并返回
movie
但格式化 release_date
的方法
public static final String DEFAULT_DATE_PATTERN = "dd/MM/yyyy";
public List<Movie> selectMovieByDate() throws ParseException {
String QUERY_GET_CONFIRM_JOURNEE = "select id, name, release_date from movie where date_format(release_date, '%Y/%M/%d') = date_format(?, '%Y/%M/%d')";
String stringDate = "2023-01-30";
Date date1=new SimpleDateFormat("yyyy-MM-dd").parse(stringDate);
String dateJournee = this.dateToString(date1, DEFAULT_DATE_PATTERN);
List<Movie> movies = this.getMovieDetail(QUERY_GET_CONFIRM_JOURNEE, jdbcTemplate,
new Object[] {dateJournee});
// TODO Auto-generated method stub
return movies;
}
RowMapper 方法
private List<Movie> getMovieDetail(String sql, JdbcTemplate jdbcTemplate, Object[] params) {
@SuppressWarnings({ "unchecked", "rawtypes", "deprecation" })
List<Movie> listDto = jdbcTemplate.query(sql, params, new RowMapper() {
@Override
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
Movie detailPaiementDto = new Movie(rs.getInt("id"), rs.getString("name"),List.of(), rs.getDate("release_date"));
return detailPaiementDto;
}
});
return listDto;
}
我很确定我错过了日期格式的匹配。谢谢回复
您使用的是多年前被现代 java.time 类取代的严重缺陷的日期时间类。对于仅限日期的值,请使用
java.time.LocalDate
.
日期时间对象保存日期时间值,而不是文本。日期时间对象没有“格式”。您正在考虑字符串和文本;学会从对象的角度思考。
同样,您应该将 objects 传递给您的 JDBC 调用,而不仅仅是字符串。 JDBC 4.2+ 要求每个驱动程序都支持 java.time 类。见
setObject
/getObject
方法PreparedStatement
和ResultSet
.
myPreparedStatement.setObject( … , myLocalDate ) ;
所有这些都已经在 Stack Overflow 上多次介绍过。搜索以了解更多信息。