Строка формата даты ISO 8601 для объекта Date в Java - PullRequest
0 голосов
/ 05 апреля 2020

Я пытался найти ответ только для разных форматов даты ISO 8601, но не смог определить ответ или материал, который содержит эти данные

Я пытаюсь получить формат даты ISO 8601 (дата только в качестве даты рождения ) и преобразовать его в объект даты, а затем сохранить в дБ. Является только форматом даты yyyy-MM-dd, который считается форматом даты ISO 8601. Если это так, я могу справиться с этим соответствующим образом, но есть ли несколько форматов даты ISO 8601, если да, то можете ли вы указать, как лучше всего проанализировать данную строку и преобразовать в объект даты в Java

1 Ответ

1 голос
/ 05 апреля 2020

Да, гггг-ММ-дд - это формат 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().

Ссылки

...