6

我正在使用 Spring JDBCTemplate 连接数据库。当我使用以下查询在数据库中选择日期时

select to_date(valid_to,'DD-MM-YYYY HH24:MI:SS') from composition

输出为 31-12-99 23:59:59。

但是,当我使用下面的 JDBCTemplate 时,

Date d = jdbcTemplate.queryForObject("select to_date(valid_to,'DD-MM-YY HH24:MI:SS') from composition",Date.class);

输出为 2099-12-31 00:00:00.0。

时间不对。我在 Date 课上也需要相同的时间。如何得到它?

4

5 回答 5

8

你需要使用java.sql.Timestamp. java.sql.Date没有时间分量,所以它的时间总是 00:00:00。

于 2013-06-22T10:18:23.870 回答
5

java.sql.Date 不保留小时、分钟、秒和毫秒,因为它反映了 SQL 中的日期类型。只需请求 java.sql.Timestamp 而不是 Date。由于 Timestamp 是 java.util.Date 的子类型,所以可以直接询问。

import java.util.Date;
import java.sql.Timestamp;

[...]

Date d = jdbcTemplate.queryForObject("select to_date(valid_to,'DD-MM-YY HH24:MI:SS') from index_composition", Timestamp.class);
于 2014-06-16T16:00:01.223 回答
1

您必须正在导入java.sql.Date. 而是使用java.util.Dateor java.util.Timestamp

java.sql.Date将截断时间。

于 2013-06-22T10:18:11.070 回答
0

感谢您的所有回复。我找到了一种消磨时间的方法。

String dateString = jdbcTemplate.queryForObject("select to_char(valis_to, 'DD-MM-YYYY HH24:MI:SS') from composition",String.class);
Date date = sdf.parse(dateString);
于 2013-06-25T11:16:26.120 回答
0

Java 8 允许我们使用更适合的 Date 类(在 java.time.* 中)。从 LocalDate (java) 到 sql 日期的转换通过以下方式完成:java.sql.Date.valueOf(LocalDate.of(2012, Month.DECEMBER, 12))

Oracle 建议使用 java 8 Dates 而不是最旧的版本:

这些类有几个缺点,包括:

The Calendar class was not type safe.
Because the classes were mutable, they could not be used in multithreaded applications.
Bugs in application code were common due to the unusual numbering of months and the lack of type safety.
于 2016-05-23T13:56:37.223 回答