Date.toString() - sql 与 util 日期

Vaa*_*ndu 1 java date jdbc simpledateformat

我需要从Date对象中删除时间。这是我的尝试,

代码:

System.out.println("date " + dbDate);
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
System.out.println("formatter.format(dbDate) " + formatter.format(dbDate));
System.out.println("final " + formatter.parse(formatter.format(dbDate)));
Run Code Online (Sandbox Code Playgroud)

输出:

date 2011-12-03 23:59:59.0
formatter.format(dbDate) 2011-12-03
final Sat Dec 03 00:00:00 IST 2011
Run Code Online (Sandbox Code Playgroud)

我想在2011-12-03. 但转换toString()Date是不同的格式。我错过了一些东西。请帮忙。

更新:

在我的应用程序中,我有两种不同的方法来获取dbDate. EXPIRY_DATE列是DATE.

第一个查询使用dbDate = (java.util.Date) rs.getDate("EXPIRY_DATE");.

为此dbDateSystem.out.println("date " + dbDate);date 2011-12-03

第二个查询使用 dbDate = rs.getTimestamp("EXPIRY_DATE");

为此dbDateSystem.out.println("date " + dbDate);date 2011-12-03 23:59:59.0.

这是我的问题。因为我认为toString()是问题,所以我没有提到完整的问题。

解决方案:

我没有选择可以避免,java.sql.Date因为我的应用程序方法有多种用途。我尝试了下面的工作,

dbDate = new java.sql.Date(dbDate.getTime());
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 5

我需要从日期对象中删除时间

你不能。该java.util.Date对象包含日期和时间。它toString()也是固定格式的。如果你想在没有时间的情况下将它呈现给人类,那么你需要String像你已经做过的那样将它转换为一个like。或者,如果您打算在没有时间的情况下将其存储在数据库中(正如db变量名称中的部分所dbDate暗示的那样),那么您需要将其转换为java.sql.Date.

preparedStatement.setDate(1, new java.sql.Date(dbDate.getTime()));
// ...
Run Code Online (Sandbox Code Playgroud)

更新根据您的更新,则ResultSet#getDate()返回一个实例java.sql.Date,而不是java.util.Date(但它的一个子类java.util.Date,这就是为什么不必要投工作;请注意,铸造是不一样的转换,真正的转换会new java.util.Date(dbDate.getTime()))。正如您在方法的javadoc中所读到toString()java.sql.Date,它确实是在yyyy-MM-dd格式上的。

因此,您的具体问题是您混淆java.sql.Datejava.util.Date并且您java.util.Date误解了该toString()方法的内部运作并被该方法误导。一切都按预期工作。

有关的: