tl;dr
Старайтесь избегать устаревших классов даты и времени. Но если вручили javax.xml.datatype.XMLGregorianCalendar
, конвертируйте в современный java.time.Instant
класс. Нет необходимости когда-либо использовать java.sql.Timestamp
.
myPreparedStatement.setObject(
… ,
myXMLGregorianCalendar // If forced to work with a `javax.xml.datatype.XMLGregorianCalendar` object rather than a modern java.time class…
.toGregorianCalendar() // …convert to a `java.util.GregorianCalendar`, and then…
.toZonedDateTime() // …convert to modern `java.time.ZonedDateTime` class.
.toInstant() // Adjust to UTC by extracting an `Instant` object.
)
Получение данных из базы данных на основе JDBC 4.2 и более поздние версии.
Instant instant = myResultSet.getObject( … , Instant.class ) ;
Java.время
К вашему сведению, ужасно неприятные старые классы даты и времени были вытеснены классами java.time.
Избегайте использования XMLGregorianCalendar
. Но если вам нужно взаимодействовать со старым кодом, еще не обновленным для типов java.time, конвертируйте. В качестве промежуточного шага преобразуйте в GregorianCalendar
, как показано в коде вашего вопроса.
java.util.GregorianCalendar gc = myXMLGregorianCalendar.toGregorianCalendar() ;
Теперь используйте новый удобный метод преобразования, добавленный в старый класс GregorianCalendar
, чтобы получить современный объект java.time.ZonedDateTime
.
ZonedDateTime zdt = gc.toZonedDateTime() ; // Convert from legacy class to modern class.
Измените этот часовой пояс на UTC. Извлеките объект Instant
, который представляет собой момент всегда в формате UTC по определению.
Instant instant = zdt.toInstant() ; // Adjust from some time zone to UTC.
Начиная с JDBC 4.2, мы можем напрямую обмениваться объектами java.time с базой данных. Так что нет необходимости снова прикасаться к java.sql.Timestamp
.
myPreparedStatement.setObject( … , instant ) ;
Поиск:
Instant instant = myResultSet.getObject( … , Instant.class ) ;
О java.time
java.time встроена в Java 8 и более поздние версии. Эти классы заменяют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
и SimpleDateFormat
.
Проект Joda-Time, теперь в режим обслуживания, советует перейти на java.time.
Чтобы узнать больше, см. Учебное пособие по Oracle. И поищите множество примеров и пояснений в Stack Overflow. Спецификация: JSR 310.
Вы можете обмениваться объектами java.time непосредственно с вашей базой данных. Используйте драйвер JDBC, совместимый с JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в java.sql.*
классах.
Где получить классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. . Этот проект является испытательным полигоном для возможных дополнений к java.time в будущем. Здесь вы можете найти несколько полезных классов, таких как Interval
a>, YearWeek
, YearQuarter
и подробнее.
person
Basil Bourque
schedule
07.07.2018