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

时间:2011-03-20 15:36:16

标签: java jdbc timestamp

数据库中日期的值是 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?如何删除它?

2 个答案:

答案 0 :(得分:5)

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

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

  

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

     

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

答案 1 :(得分:2)

问题是格式化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.
}