Да, гггг-ММ-дд - это формат ISO 8601 для даты без времени суток и без часового пояса.
Для сохранения в базе данных SQL с использованием JDB C 4.2 или более поздний драйвер или современная реализация JPA, такая как Hibernate 5, у вас нет ничего, чтобы использовать объект Date
(независимо от того, имели ли вы в виду java.util.Date
или java.sql.Date
). Я рекомендую вместо этого использовать java .time, современный Java API даты и времени. Класс для даты без времени суток - LocalDate
. И вы можете сохранить его в своей базе данных без какого-либо преобразования.
LocalDate
анализирует формат ISO 8601 как его значение по умолчанию, то есть без какого-либо явного средства форматирования:
String receivedString = "1962-11-27";
LocalDate dateOfBirth = LocalDate.parse(receivedString);
System.out.println("Date of birth is " + dateOfBirth);
LocalDate
также возвращает формат ISO 8601, когда мы его печатаем:
Дата рождения - 1962-11-27
Хотя я еще не дал вам полную историю. yyyy-MM-dd - это расширенный формат , который наиболее часто используется. Существует также формат basi c , который является компактным в том смысле, что он оставляет дефисы: yyyyMMdd. Я предлагаю вам настаивать на получении строки даты в расширенном формате. Если вы не можете этого сделать, вам придется указать форматер для разбора:
String receivedString = "19621127";
LocalDate dateOfBirth = LocalDate.parse(
receivedString, DateTimeFormatter.BASIC_ISO_DATE);
Это даст вам LocalDate
, равное и неотличимое от того, которое мы имели раньше.
Чтобы сохранить в вашей базе данных с использованием JDB C:
PreparedStatement pStmt
= yourDatabaseConnection.prepareStatement(
"insert into your_table (date_of_birth) values (?);");
pStmt.setObject(1, dateOfBirth);
int insertedRows = pStmt.executeUpdate();
Обратите внимание на использование setObject()
, а не setDate()
.
Ссылки