Нет «формата» в базе данных
Формат даты в sql: 2018-11-22 11: 12: 38.291647
Нет, это не так.
Значения даты и времени, хранящиеся в типах даты и времени, не имеют «формата».Форматы для строк.База данных хранит значение даты и времени в собственной внутренней структуре данных.Детали этой структуры данных не относятся к нашей сфере деятельности.
Умные объекты, а не тупые строки
Обмен объектами даты и времени класса даты и времени с базой данных для значений, хранящихся в датестолбец
Начиная с JDBC 4.2, мы можем обмениваться java.time объектами с базой данных.Больше не нужно использовать эти ужасные классы, такие как java.sql.Timestamp
, java.sql.Date
, java.util.Date
и java.util.Calendar
.
На мгновение в базе данных используется столбец типа, похожего на стандарт SQL TIMESTAMP WITH TIME ZONE
.
OffsetDateTime
Для такого столбца передайте объект OffsetDateTime
в подготовленный оператор.Обычно лучше всего работать в UTC.
Instant instant = Instant.parse( "2018-11-22T11:12:38.291647Z" ) ; // `Z` on the end means UTC. Pronounced “Zulu”.
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC ) ;
myPreparedStatement.setObject( … , odt ) ;
Извлечение.
OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;
Сравнить
Сравнить OffsetDateTime
объектов с использованием isBefore
, isAfter
и isEqual
.
boolean aIsBeforeThanB = odtA.isBefore( odtB );
О java.time
Создан фреймворк java.time в Java 8 и позже.Эти классы вытесняют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial .И поиск переполнения стека для многих примеров и объяснений.Спецификация: JSR 310 .
Вы можете обмениваться java.time объектами непосредственно с вашей базой данных.Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии.Нет необходимости в строках, нет необходимости в java.sql.*
классах.
Где получить классы java.time?
ThreeTen-Extra Проект расширяет java.time дополнительными классами.Этот проект является полигоном для возможных будущих дополнений к java.time.Здесь вы можете найти несколько полезных классов, таких как Interval
, YearWeek
, YearQuarter
и more .