java util date to sql date

Я пытаюсь использовать java.util.Date как ввод, а затем создавая запрос с ним — так что мне нужен java.sql.Date .

Я был удивлен, обнаружив, что он не может выполнить преобразование неявно или явно, но я даже не знаю, как бы это сделать, поскольку Java API по-прежнему довольно новичок.

Как преобразовать java.util.Date в java.sql.Date?

Не. Оба класса устарели.

  • Используйте классы java.time вместо устаревших java.util.Date & java.sql.Date с JDBC 4.2 или более поздней версии.
  • Преобразуйте в/из java.time, если взаимодействует с кодом, еще не обновленным до java.time.
  • Instant вместо java.util.Date
    Оба представляют момент в UTC. но теперь с наносекундами вместо миллисекунд.
  • LocalDate вместо java.sql.Date
    Оба представляют значение только для даты без времени суток и без часового пояса.

Если вы пытаетесь работать со значениями только по дате (без времени суток, без часового пояса), используйте класс LocalDate вместо java.util.Date .

В Java 8 и более поздних версиях старые проблемные классы даты и времени, связанные с ранними версиями Java, были заменены новым пакетом java.time. См. Учебное пособие по Oracle. Большая часть функциональности была перенесена на Java 6 & 7 в ThreeTen-Backport и дополнительно адаптированы для Android в ThreeTenABP.

Тип данных SQL DATE предназначен только для даты, без времени суток и часового пояса. У Java никогда не было именно такого класса † до java.time.LocalDate в Java 8. Давайте создадим такое значение, получая сегодняшнюю дату в соответствии с конкретным часовым поясом (часовой пояс важен при определении даты как нового дня). например, в Париже рассветает раньше, чем в Монреале).

На этом мы можем закончить. Если ваш драйвер JDBC соответствует спецификации JDBC 4.2, вы сможете передавать LocalDate через setObject на PreparedStatement для хранения в поле SQL DATE.

Аналогично, используйте ResultSet::getObject для извлечения из столбца SQL DATE в объект Java LocalDate . Указание класса во втором аргументе делает ваш код безопасным с точки зрения типа.

Другими словами, весь этот Вопрос не имеет отношения к JDBC 4.2 или более поздней версии.

Если ваш драйвер JDBC не работает таким образом, вам нужно вернуться к преобразованию в типы java.sql.

Для преобразования используйте новые методы, добавленные к старым классам даты и времени. Мы можем вызвать java.sql.Date.valueOf(…) для преобразования LocalDate .

И идти в другом направлении.

Хотя вам следует избегать использования старых классов даты и времени, вас могут заставить работать с существующим кодом. Если это так, вы можете конвертировать в/из java.time.

Пройдите через класс Instant , который представляет момент на временной шкале в UTC. Instant по идее аналогичен java.util.Date . Но обратите внимание, что Instant имеет разрешение до наносекунд, тогда как java.util.Date имеет разрешение только миллисекунд.

Для преобразования используйте новые методы, добавленные к старым классам. Например, java.util.Date.from( Instant ) и java.util.Date::toInstant .

Чтобы определить дату, нам нужен контекст часового пояса. В любой момент времени дата меняется по всему земному шару в зависимости от часового пояса. Примените ZoneId , чтобы получить ZonedDateTime .

† Класс java.sql.Date претендует на то, чтобы иметь только дату без времени суток, но фактически делает время суток, настроенное на полночь. Смешение? Да, старые классы даты и времени — беспорядок.

Инфраструктура java.time встроена в Java 8 и более поздние версии. Эти классы вытесняют проблемные старые legacy унаследованные классы даты и времени, такие как java.util.Date , Calendar и SimpleDateFormat .

Проект Joda-Time, который теперь находится в режиме обслуживания maintenance mode, рекомендует выполнить переход на классы java.time.

Чтобы узнать больше, см. Oracle Tutorial. И поищите в Кару множество примеров и объяснений. Спецификация: JSR 310.

You often need to convert java.util.Date to java.sql.Date if you are storing dates in database e.g. SQL SERVER or MySQL. Since JDBC has their own data types for date and time e.g. java.sql.Date , java.sql.Time and java.sql.TimeStamp to match with database date, time and date-time types, you cannot pass a java.util.Date directly. All methods which are suppose to store dates e.g. setDate(paramName, paramValue) expects java.sql.Date, so it becomes essential to know how to convert java.util.Date to java.sql.Date in JDBC. You would be surprised to know that java.sql.Date is a subclass of java.util.Date and all it does is suppress or remove time-related fields from java.util.Date.

It is also a good example of a >java.sql.Date extends java.util.Date , you cannot pass around it to the method which expect java.util.Date because all time-related methods e.g. getHour() , getMinute() and getSeconds() method throws java.util.NotSupportedException .

I really hope that JDBC driver could do the translation depending upon the data type of columns and Java developer could just pass the java.util.Date e.g. convert it to java.sql.Date if the column in the table is of type DATE, java.sql.Time if the type of column is TIME and java.sql.Timestamp if the data type of column is DATETIME.

Converting java.util.Date to java.sql.Date — Example

Unfortunately, there is no method like toSQLDate() in java.util.Date >getTime() method to extract long millisecond value from java.util.Date and create a new java.sql.Date based on that value as shown below:

This is the easiest and right way to convert a java.util.Date to java.sql.Date in Java. To learn more about JDBC and how to write Java application which connects to the database, please see Core Java, Volume II—Advanced Features (10th Edition), one of the best books to learn advanced features of Java programming language.

1) java.sql.Date mapped to DATE datatype on JDBC i.e. Type.Date, which corresponds to date equivalent in DB side. In SQLSERVER till 2008 it maps to DATETIME and afterward maps to DATE data type.

2) java.sql.Date extends java.util.Date but voilates Liskov Substituion Principle.

3) You can convert between java.util.Date and java.sql.Date by using getTime() method.

4) Here is mapping between MySQL date and time types and Java date types:

Posted by: Theodora Fragkouli in Date October 21st, 2014 0 Views

In this example, we shall show you how to convert a java.util.Date object to a java.sql.Date object. This conversion is usually necessary when a Date object needs to be written in a database.

java.util.Date represents a specific instant in time, with millisecond precision. It represents both date and time.

java.sql.Date is a wrapper around millisecond value and is used by JDBC to identify an SQL DATE type. It is a subclass of java.util.Date . Though, it only represents date information, so hours, minutes, seconds, and milliseconds must be set to zero in a specified time zone, so that this date is equivalent to an SQL DATE type.

In DatesConversion.java class below, we use the java.util.Date() constructor, that creates a Date object and initializes it to represent time to the nearest millisecond. This date is used in the convertUtilToSql(java.util.Date uDate) method to return a java.sql.Date object. In this method, the java.util.Date object is converted to a java.sql.Date object, using the java.sql.Date(long date) constructor. This constructor needs a long param, which is the time value in milliseconds. So, the getTime() API method of java.util.Date is used here that returns the number of milliseconds since January 1, 1970, 00:00:00 GMT of this date object.

So, this is it! The java.util.Date is converted to java.sql.Date.

Run the example. The result is the one below:

Оцените статью