display timestamp value in java from database

2019-05-07 18:45发布

问题:

the value of date in database is 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);
}

the value of date the the above function is returning is 2011-03-19 18:49:04.0.

Why it is appending .0 at the end?How to remove it?

回答1:

The question is about formatting the Date/Timestamp, not the internal precision (Date holds milliseconds). Try formatting the Timestamp to not show the fractional seconds, use SimpleDateFormat for example: Timestamp date;

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.
}


回答2:

java.sql.Timestamp (as returned by getTimestamp) includes a nanosecond component, and its toString() method appends that nanosecond value to the end of the String. In your case, the nanosecond value is zero (your data only has one-second precision).

Note that while java.sql.Timestamp is a subclass of java.util.Date, you should be careful about treating it as such. From the Javadoc:

This type is a composite of a java.util.Date and a separate nanoseconds value. Only integral seconds are stored in the java.util.Date component. The fractional seconds - the nanos - are separate. The Timestamp.equals(Object) method never returns true when passed an object that isn't an instance of java.sql.Timestamp, because the nanos component of a date is unknown. As a result, the Timestamp.equals(Object) method is not symmetric with respect to the java.util.Date.equals(Object) method. Also, the hashcode method uses the underlying java.util.Date implementation and therefore does not include nanos in its computation.

Due to the differences between the Timestamp class and the java.util.Date class mentioned above, it is recommended that code not view Timestamp values generically as an instance of java.util.Date. The inheritance relationship between Timestamp and java.util.Date really denotes implementation inheritance, and not type inheritance.