Получить текущую дату в 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());
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)