tl; dr
myPreparedStatement // Using a `PreparedStatement` avoids SQL-injection security risk.
.setObject( // As of JDBC 4.2, we can exchange java.time objects with a database via `getObject`/`setObject` methods.
… , // Indicate which `?` placeholder in your SQL statement.
OffsetDateTime.now( ZoneOffset.UTC ) // Capture the current moment in UTC.
) ;
java.time
Современное решение использует классы java.time , которые годы назад вытеснили ужасные старые классы даты и времени..
Получить текущий момент в UTC, используя OffsetDateTime
.
OffsetDateTime odt = OffsetDateTime.now( ZoneOffset.UTC ) ;
В MySQL 8.0 используется разрешение микросекунд для шести десятичных знаковместа в доли секунды.Классы java.time имеют более точное разрешение наносекунд .Таким образом, вы можете обрезать любые существующие нанос из вашего OffsetDateTime
.Укажите желаемое разрешение с помощью ChronoUnit
.
OffsetDateTime odt =
OffsetDateTime
.now(
ZoneOffset.UTC
)
.truncatedTo( ChronoUnit.MICROS )
;
Отправьте в свою базу данных через PreparedStatement
на столбец типа, похожего на SQL-стандартный TIMESTAMP WITH TIME ZONE
тип данных.Для MySQL 8.0 это будет тип TIMESTAMP
.
myPreparedStatement.setObject( … , odt ) ;
И поиск через ResultSet
.
OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;
Чтобы увидеть этот момент через объектив настенного времени, используемого людьми определенного региона (времязона), примените ZoneId
, чтобы получить ZonedDateTime
объект.
ZoneId z = ZoneId.of( "Asia/Kolkata" ) ;
ZonedDateTime zdt = odt.atZoneSameInstant( z ) ; // Same moment, same point on the timeline, different wall-clock time.
О 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 .