从数据库中显示java中的时间戳值

数据库中的日期值是2011-03-19 18:49:04

Timestamp date; ResultSet rs=smt.executeQuery("select * from posttopic where name='"+logn+"'"); while(rs.next()){ name=rs.getString(1); title=rs.getString(2); subject=rs.getString(3); message=rs.getString(4); date=rs.getTimestamp(5); System.out.print(date); } 

上述函数返回的日期值是2011-03-19 18:49:04.0。

为什么它在最后附加.0?如何删除它?

问题是关于格式化Date / Timestamp ,而不是内部精度(日期保持毫秒)。 尝试将Timestamp格式化为不显示小数秒,例如使用SimpleDateFormat :时间戳日期;

 ResultSet rs=smt.executeQuery("select * from posttopic where name='"+logn+"'"); // Create a date formatter with pattern as required: year-month-day hour:minute:second java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); while(rs.next()) { name=rs.getString(1); title=rs.getString(2); subject=rs.getString(3); message=rs.getString(4); date=rs.getTimestamp(5); System.out.print(sdf.format(date)); // Format the date using the specified pattern. } 

java.sql.Timestamp (由getTimestamp返回)包含一个纳秒组件,其toString()方法将该纳秒值附加到String的末尾。 在您的情况下,纳秒值为零(您的数据只有一秒精度)。

请注意,虽然java.sql.Timestampjava.util.Date的子类,但您应该小心处理它。 来自Javadoc :

此类型是java.util.Date和单独的纳秒值的组合。 只有整数秒存储在java.util.Date组件中。 分数秒 – 纳米 – 是分开的。 传递一个不是java.sql.Timestamp实例的对象时, Timestamp.equals(Object)方法永远不会返回true,因为日期的nanos组件是未知的。 因此, Timestamp.equals(Object)方法与java.util.Date.equals(Object)方法不对称。 此外,哈希码方法使用底层的java.util.Date实现,因此在其计算中不包括nanos。

由于Timestamp类和上面提到的java.util.Date类之间存在差异,因此建议代码不要将Timestamp值一般视为java.util.Date的实例。 Timestampjava.util.Date之间的inheritance关系实际上表示实现inheritance,而不是类型inheritance。