tl; dr
myPreparedStatement.setObject( … , LocalDate.parse( "2020-07-07" ) )
Date
класс - не для дат
Одним из многих fl aws в классе java.util.Date
является его имя. Это не представляет дату. Этот класс представляет момент, дату со временем дня, как показано в UT C.
Добавляет путаницу то, что его метод toString
динамически применяет текущий часовой пояс JVM по умолчанию.
Никогда не используйте Date
И класс java.util.Date
, и класс java.sql.Date
ужасны, имеют недостатки в дизайне, написаны людьми, которые не понимали обработки даты и времени. Избегайте их вместе с SimpleDateFormat
и c. Sun, Oracle и сообщество JCP отказались от этих занятий в go, и вы тоже должны.
java .time
Эти устаревшие классы были вытеснены годами a go современными java .time классами.
Ваша строка ввода соответствует стандарту ISO 8601 формат. Классы java .time по умолчанию используют эти форматы при синтаксическом анализе / генерации строк.
LocalDate ld = LocalDate.parse( "2020-07-07" ) ;
База данных
Вы можете обменять java. time с вашей базой данных, начиная с JDB C 4.2 и новее. Убедитесь, что ваш JDB C драйвер обновлен.
Вы должны записывать объект LocalDate
в столбец типа, близкого к SQL -стандарту введите DATE
.
myPreparedStatement.setObject( … , ld ) ;
Получение.
LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;
Примерно java .time
Фреймворк java .time встроен в Java 8 и более поздние версии. Эти классы заменяют неудобные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Чтобы узнать больше, см. Oracle Учебное пособие . И поищите в Stack Overflow множество примеров и объяснений. Спецификация: JSR 310 .
Проект Joda-Time , теперь в режиме обслуживания , советует перейти на java .time классы.
Вы можете обменивать объекты java .time непосредственно с вашей базой данных. Используйте драйвер JDB C , совместимый с JDB C 4.2 или новее. Нет необходимости в строках, нет необходимости в классах java.sql.*
. Поддержка Hibernate 5 и JPA 2.2 java .time .
Где получить классы java .time?
- Java SE 8 , Java SE 9 , Java SE 10 , Java SE 11 и выше - часть стандартного Java API с объединенной реализацией.
- Java 9 внесены некоторые незначительные изменения и исправления.
- Java SE 6 и Java SE 7
- Большая часть функций java .time вернулась перенесено на Java 6 и 7 дюймов ThreeTen-Backport .
- Android
- Более поздние версии Android (26+) реализации пакетов классов java .time .
- Для более ранних Android (<26), процесс, известный как <a href="https://developer.android.com/studio/write/java8-support#library-desugaring" rel="nofollow noreferrer"> API Desugaring , приносит подмножество java .time функциональности, которая изначально не использовалась встроен в Android.
Таблица того, какая библиотека java .time для использования с какой версией Java или Android