Преобразование java.sql.Date в java.util.Date
Вопрос: Как простейшим способом преобразовать объект java.sql.Date
в java.util.Date
, сохранив при этом временную метку?
Я попытался сделать это следующим образом:
java.util.Date newDate = new Date(result.getDate("VALUEDATE").getTime());
Однако это не сработало. В переменной по-прежнему сохраняется только часть даты без времени. Как можно решить эту проблему?
5 ответ(ов)
Поскольку java.sql.Date
наследует от java.util.Date
, вы можете сделать так:
java.util.Date newDate = result.getDate("VALUEDATE");
В этом случае метод getDate
вернёт объект java.sql.Date
, который автоматически будет приведён к типу java.util.Date
. Это возможно благодаря наследованию, и вы можете использовать его как обычный объект Date
.
Класс java.sql.Date
предназначен только для хранения даты без времени, поэтому результат преобразования, который вы видите, является корректным для этого типа. Если вам нужно получить полную дату с учетом времени, вам следует использовать java.sql.Timestamp
. Например:
java.util.Date newDate = result.getTimestamp("VALUEDATE");
Таким образом, getTimestamp
вернет вам объект, который учитывает как дату, так и время.
Если вы действительно хотите, чтобы тип во время выполнения был именно util.Date
, просто сделайте следующее:
java.util.Date utilDate = new java.util.Date(sqlDate.getTime());
Надеюсь, это поможет!
Эта функция преобразует объект SQL даты в объект даты Java. Вот пример реализации:
public static java.util.Date convertFromSQLDateToJAVADate(
java.sql.Date sqlDate) {
java.util.Date javaDate = null;
if (sqlDate != null) {
javaDate = new Date(sqlDate.getTime());
}
return javaDate;
}
Функция принимает параметр sqlDate
типа java.sql.Date
. Если sqlDate
не равен null
, то создается новый объект java.util.Date
, используя время из объекта SQL даты. В результате вы получаете дату в формате Java. Если же входной параметр равен null
, функция вернет null
.
Изучив исходный код, можно заметить, что если у объекта java.sql.Date
действительно есть информация о времени, то вызов метода getTime()
вернет значение, которое включает эту временную информацию.
Если это не работает, то значит, что информация о времени отсутствует в объекте java.sql.Date
. Я полагаю, что JDBC-драйверы или база данных, по сути, обнуляют компонент времени... или же информация изначально не была там.
Вам следует использовать java.sql.Timestamp
и соответствующие методы для работы с ResultSet, а также соответствующий SQL-тип.
ResultSet: Извлечение значений столбцов по индексу или по метке?
Можно ли подключиться к SQL Server с использованием Windows Authentication из веб-приложения Java EE?
java.sql.SQLException: Не найден подходящий драйвер для jdbc:mysql://localhost:3306/dbname
Инициализация ArrayList в одну строчку
Создание репозитория Spring без сущности