数据库中日期的值是 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?如何删除它?
答案 0 :(得分:5)
java.sql.Timestamp
(由getTimestamp
返回)包含一个纳秒组件,其toString()
方法将该纳秒值附加到字符串的末尾。在您的情况下,纳秒值为零(您的数据只有一秒精度)。
请注意,虽然java.sql.Timestamp
是java.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
的实例。Timestamp
和java.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.
}