Т.Л., д-р
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".replace(" " , "T") // Alter input string to comply with standard ISO 8601 formatting.
)
)
java.time
Современный подход использует java.time классы, которые вытесняют старые проблемные устаревшие классы, такие как java.util.Date
и java.sql.Date
.
Для значения даты используйте LocalDate
. Класс LocalDate
представляет собой значение только для даты без времени и без часового пояса.
Преобразуйте свою строку ввода в соответствие со стандартным форматированием ISO 8601. Замените SPACE посередине на T
.
String input = "2018-01-23".replace(" " , "T") ;
Классы java.time используют стандартные форматы при разборе/генерации строк. Поэтому нет необходимости указывать шаблон форматирования.
LocalDate ld = LocalDate.parse(input) ;
Вы можете напрямую обмениваться java.time объектов с базой данных, используя JDBC driver совместимый с JDBC 4.2 или более поздней версии. Вы можете забыть о преобразовании в и из классов java.sql. *.
myPreparedStatement.setObject(… , ld) ;
индексирование:
LocalDate ld = myResultSet.getObject(… , LocalDate.class) ;
О java.time
java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытесняют неприятные старые legacy классы времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Проект Joda-Time, в настоящее время в maintenance mode, советует перейти на классы java.time.
Чтобы узнать больше, см. Oracle Tutorial. И поиск Stack Overflow для многих примеров и объяснений. Спецификация: JSR 310.
Где получить классы java.time?
- Java SE 8, Java SE 9, а затем
- Встроенный.
- Часть стандартного Java API с объединенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 и Java SE 7
- Большая часть функциональности java.time будет обратно портирован на Java 6 & 7 в ThreeTen-Backport.
- Android
- Более поздние версии Android реализаций пачке классов java.time.
- Для более ранних Android, проект ThreeTenABP адаптируется ThreeTen-Backport (упомянутый выше). См. How to use ThreeTenABP….
ThreeTen-Extra Проект расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval
, YearWeek
, YearQuarter
и more.
В зависимости от вашего прецедента вы можете не отправлять дату от клиента. Вместо этого у вас есть триггер insert в таблице, чтобы установить столбец «сейчас» на стороне сервера db. Таким образом, вы можете иметь согласованную временную метку на стороне сервера, защищать себя от проблем с часами/часовыми поясами на стороне клиента, а новые записи по-прежнему обновлять дату, если записи вставляются из другого клиентского приложения или транзакции addhoc. – Glenn
благодарю вас за советы. – giozh