отображать значение метки времени в java из базы данных - PullRequest
4 голосов
/ 20 марта 2011

значение даты в базе данных 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 ]

5 голосов
/ 20 марта 2011

java.sql.Timestamp (как возвращено getTimestamp) включает наносекундный компонент, а его метод toString() добавляет это наносекундное значение к концу строки. В вашем случае значение наносекунды равно нулю (ваши данные имеют точность только в одну секунду).

Обратите внимание, что, хотя java.sql.Timestamp является подклассом java.util.Date, вы должны быть осторожны с ним. Из Javadoc :

Этот тип является составным из java.util.Date и отдельного значения наносекунд. В компоненте java.util.Date хранятся только целые секунды. Дробные секунды - нано - разделены. Метод Timestamp.equals(Object) никогда не возвращает true, если передан объект, который не является экземпляром java.sql.Timestamp, потому что компонент nanos даты неизвестен. В результате метод Timestamp.equals(Object) не является симметричным относительно метода java.util.Date.equals(Object). Кроме того, метод хэш-кода использует базовую реализацию java.util.Date и, следовательно, не учитывает наночастицы в своих вычислениях.

Из-за различий между классом Timestamp и классом java.util.Date, упомянутым выше, рекомендуется, чтобы код не рассматривал значения Timestamp в общем случае как экземпляр java.util.Date. Отношения наследования между Timestamp и java.util.Date действительно означают наследование реализации, а не наследование типов.

2 голосов
/ 20 марта 2011

Вопрос касается форматирования 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.
}
...