Как отформатировать java.sql.Timestamp(гггг-ММ-дд ЧЧ: мм: сс.с) к дате (гггг-ММ-дд ЧЧ: мм: сс)
Ну, у меня есть детали, используя Date
потому что я получаю объект из моей базы данных и в переменной "fecha" (дата) из того же объекта, я получаю java.sql.Timestamp
, так что форматирование с миллисекундами, но я не хочу, чтобы миллисекунды появлялись. Поэтому мне нужно отформатировать дату, которую я получаю из моей БД, в новую дату без миллисекунд.
Это объект Factura:
public class Factura implements java.io.Serializable {
private FacturaId id;
...
private boolean activo;
private Date fecha;
}
В XML, который сопоставлен с БД, у меня есть этот код для этой переменной "fecha":
<property name="fecha" type="timestamp">
<column length="19" name="fecha" not-null="true"/>
</property>
В базе данных этот столбец fecha DATETIME
,
И когда я получаю объект Factura
из моей БД я получаю такую дату 2013-10-10 10:49:29.0
но я хочу это без .0
(миллисекунды).
Я пробовал это (factura
это Factura
объект):
try {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date fechaNueva = null;
String fechaStr = factura.getFecha().toString();
int tamaño = fechaStr.length()-2;
fechaStr = fechaStr.substring(0, tamaño); //I get a string without the miliseconds
fechaNueva = format.parse(fechaStr);
} catch(ParseException ex) {
...
}
Но fechaNueva
дает мне Thu Oct 10 10:49:29 CDT 2013
и я хочу только 2013-10-10 10:49:29
, не могли бы вы мне помочь, пожалуйста?
Заранее большое спасибо.
2 ответа
Вам не нужно использовать подстроку вообще, так как ваш format
не держит эту информацию.
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String fechaStr = "2013-10-10 10:49:29.10000";
Date fechaNueva = format.parse(fechaStr);
System.out.println(format.format(fechaNueva)); // Prints 2013-10-10 10:49:29
Объект даты и времени не является строкой
Класс java.sql.Timestamp не имеет формата. Его метод toString генерирует строку в формате.
Не связывайте объект даты и времени со строкой, которая может представлять его значение. Объект даты и времени может анализировать строки и генерировать строки, но сам по себе не является строкой.
java.time
Сначала преобразуйте проблемные старые унаследованные классы даты и времени в классы java.time. Используйте новые методы, добавленные к старым классам.
Instant instant = mySqlDate.toInstant() ;
Потерять долю секунды, которую вы не хотите.
instant = instant.truncatedTo( ChronoUnit.Seconds );
Присвойте часовой пояс для настройки по UTC, используемому Instant.
ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = instant.atZone( z );
Создайте строку, близкую к желаемому результату. Заменить его T
в середине с пробелом.
DateTimeFormatter f = DateTimeFormatter.ISO_LOCAL_DATE_TIME ;
String output = zdt.format( f ).replace( "T" , " " );