Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

display timestamp value in java from database

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?

like image 966
Deep Avatar asked Jan 20 '23 04:01

Deep


2 Answers

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.

like image 56
skaffman Avatar answered Feb 02 '23 00:02

skaffman


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.
}
like image 41
David Oliván Ubieto Avatar answered Feb 01 '23 22:02

David Oliván Ubieto