При обмене данными с базой данных используйте соответствующие типы дат и объекты.Не используйте простые строки или целые числа вместо допустимых типов / классов.
java.time
Современный подход использует классы java.time .С драйвером JDBC , соответствующим JDBC 4.2 или новее, вы можете опустить использование java.sql.Time
класса и просто использовать java.time.LocalTime
напрямую.
Унаследованный класс java.util.Date
представляет дату и время в UTC .Преобразуйте в современный класс java.time (Instant
), назначьте часовой пояс, в котором вы хотите просмотреть значение, и извлеките время суток.
Чтобы преобразовать, вызовите новые методы, добавленные к старым унаследованным классам.
Instant instant = myJavaUtilDate.toInstant() ;
Назначьте часовой пояс.
Часовой пояс критический ,В любой момент времени дата меняется по всему земному шару в зависимости от зоны.Например, через несколько минут после полуночи в Париж Франция - это новый день, в то время как "вчера" в Монреаль Квебек .
Укажите надлежащий часовой поясимя в формате continent/region
, например America/Montreal
, Africa/Casablanca
или Pacific/Auckland
.Никогда не используйте 3-4-буквенное сокращение, например EST
или IST
, так как они не истинные часовые пояса, не стандартизированы и даже не уникальны (!).
ZoneId z = ZoneId.of( "America/Montreal" ) ; // Or "Asia/Kolkata", or "Pacific/Auckland", etc.
ZonedDateTime zdt = instant.atZone( z ) ;
Извлечение времени суток без даты.
LocalTime lt = zdt.toLocalTime() ;
Перейдите в PreparedStatement
, позвонив по номеру setObject
.
String sql = "INSERT INTO tbl_ ( time_of_day_ ) VALUES ( ? ) ; " ;
PreparedStatement ps = conn.prepareStatement( sql ) ;
ps.setObject( 1 , lt ) ; // Call `setObject` to pass a java.time object directly without converting into `java.sql.*` type.
int rows = ps.executeUpdate() ;
Получать данные аналогичным образом, вызывая ResultSet::getObject
.
LocalTime lt = myResultSet.getObject( … , LocalTime.class ) ;