Преобразование 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
Что значит 'synchronized'?
Как объявить массив в одну строку?