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");.
为此dbDate,System.out.println("date " + dbDate);给date 2011-12-03
第二个查询使用 dbDate = rs.getTimestamp("EXPIRY_DATE");
为此dbDate,System.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)
我需要从日期对象中删除时间
你不能。该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.Date了java.util.Date并且您java.util.Date误解了该toString()方法的内部运作并被该方法误导。一切都按预期工作。