Получить текущую дату в Java.язык SQL.Формат даты

мне нужно добавить текущую дату в подготовленный оператор вызова JDBC. Мне нужно добавить дату в формате yyyy/MM/dd.

Я пробовал с

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
Date date = new Date();
pstm.setDate(6, (java.sql.Date) date);

но у меня есть эта ошибка:

threw exception
java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date

есть ли способ получить java.sql.Date объект с тем же форматом?

8 ответов


A java.util.Date не java.sql.Date. Все наоборот. А java.sql.Date это java.util.Date.

вам нужно будет преобразовать его в java.sql.Date С помощью конструктор, который принимает long и java.util.Date может поставить.

java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());

просто в одну строку:

java.sql.Date date = new java.sql.Date(Calendar.getInstance().getTime().getTime());

new java.sql.Date(Calendar.getInstance().getTimeInMillis());

они все слишком длинные.

просто использовать:

new Date(System.currentTimeMillis())

tl; dr

myPreparedStatement.setObject(   // Directly exchange java.time objects with database without the troublesome old java.sql.* classes.
    … ,                                   
    LocalDate.parse(             // Parse string as a `LocalDate` date-only value.
        "2018-01-23"             // Input string that complies with standard ISO 8601 formatting.
    ) 
)

java.время

современный подход использует java.время классы, которые вытесняют хлопотные старые устаревшие классы, такие как java.util.Date и java.sql.Date.

для значения только для даты используйте LocalDate. The LocalDate класс представляет значение только даты без времени суток и без часового пояса.

java.классы времени используют стандартные форматы при разборе / генерации строк. Так что не надо укажите шаблон форматирования.

LocalDate ld = LocalDate.parse( input ) ;

вы можете напрямую обмениваться java.время объекты с базой данных с помощью драйвер JDBC соответствуют JDBC 4.2 или позже. Вы можете забыть о преобразовании в Ява.язык SQL.* учебные занятия.

myPreparedStatement.setObject( … , ld ) ;

извлечение:

LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;

о java.время

на java.время база встроенные в Java 8 и выше. Эти классы вытесняют беспокойных старых наследие классы даты и времени, такие как java.util.Date, Calendar, & SimpleDateFormat.

на Joda Времени, теперь режим обслуживания, советует миграцию в java.время классы.

чтобы узнать больше, см. В Oracle Учебник. Поиск Stack Overflow для многих примеров и объяснений. Спецификация JSR 310.

где получить java.время занятий?

  • Java SE 8, Java SE 9, и позже
    • встроенный.
    • часть стандартного API Java со встроенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и зафиксировать.
  • Java SE 6 и Java SE 7
    • большая часть java.функциональность времени обратно портирована на Java 6 & 7 в ThreeTen-Backport.
  • Android
    • более поздние версии Android bundle реализации java.время занятия.
    • для более раннего Android,ThreeTenABP проект приспосабливается ThreeTen-Backport (упоминалось выше). См.как использовать ThreeTenABP....

на ThreeTen-Extra проект расширяет java.время с дополнительными занятиями. Этот проект является испытательной площадкой для возможных будущих дополнений к java.время. Вы можете найти некоторые полезные классы, такие как Interval, YearWeek, YearQuarter и больше.


вы можете достичь цели с помощью следующих способов : -

long millis=System.currentTimeMillis();  
java.sql.Date date=new java.sql.Date(millis);  

или

// create a java calendar instance
Calendar calendar = Calendar.getInstance();

// get a java date (java.util.Date) from the Calendar instance.
// this java date will represent the current date, or "now".
java.util.Date currentDate = calendar.getTime();

// now, create a java.sql.Date from the java.util.Date
java.sql.Date date = new java.sql.Date(currentDate.getTime());

все, что вам нужно сделать, это

    Calendar currenttime = Calendar.getInstance();               //creates the Calendar object of the current time
    Date sqldate = new Date((currenttime.getTime()).getTime());  //creates the sql Date of the above created object
    pstm.setDate(6, (java.sql.Date) date);              //assign it to the prepared statement (pstm in this case)

будет делать: new Date(Instant.now().toEpochMilli())