Для значения только для даты, без времени суток и без часового пояса, вы должны использовать MySQL тип DATE
при определении столбца. Этот тип соответствует типу DATE
, определенному в стандарте SQL.
На стороне Java никогда не используйте java.util.Date
. Этот класс является частью ужасных классов даты и времени, включенных в самые ранние версии Java. Это были годы go, вытесненные классами java .time , определенными в JSR 310.
Для значения только на дату в Java используйте java.time.LocalDate
.
На вашей карте вы должны хранить LocalDate
объект, а не просто строку. Но если вам нужно, вы можете анализировать и генерировать строки. Формат ваших строк, кажется, совпадает со стандартным форматом, определенным в ISO 8601. Классы java .time по умолчанию используют эти стандартные форматы. Поэтому нет необходимости указывать шаблон форматирования.
LocalDate localDate = LocalDate.parse( "2021-01-23" ) ;
Объекты классов java .time могут быть обменены с вашей базой данных с помощью драйвера JDB C соответствует JDB C 4.2 и более поздним версиям.
Запись этого в базу данных.
myPreparedStatement.setObject( … , localDate ) ;
Извлечение из базы данных.
LocalDate localDate = myResultSet.getObject( … , LocalDate.class ) ;
Использование подхода, показанного выше, делает часовые пояса нерелевантными: LocalDate
через JDB C 4.2 или новее для столбца типа MySQL DATE
- То есть, если ваш JDB C драйвер is buggy (Bug # 30877755): См. Answer by Teh Swi sh.