Localdate.format, формат не применяется - PullRequest
0 голосов
/ 22 мая 2018

У меня есть DatePicker в моем FXML, и мне нужна Date, чтобы вставить его в мою базу данных SQL.Я хочу отформатировать дату, но она не работает.

    LocalDate localDate = purchased_at.getValue();
    localDate.format(DateTimeFormatter.ofPattern("dd.mm.yyyy"));

Это ошибка, которую я получаю.

Caused by: java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: MinuteOfHour

Я все еще новичок.Я имел Java в течение прошлых 3 или 4 месяцев теперь.Я стараюсь изо всех сил, чтобы улучшить.

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Мне пришлось использовать конвертер строк для моего DatePicker.

    public String changeformat(DatePicker date) {

    date.setConverter(new StringConverter<LocalDate>() {
        String pattern = "MM.yyyy";
        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(pattern);

        {
            date.setPromptText(pattern.toLowerCase());
        }

        @Override
        public String toString(LocalDate date) {
            if (date != null) {
                return dateFormatter.format(date);
            } else {
                return "";
            }
        }

        @Override
        public LocalDate fromString(String string) {
            if (string != null && !string.isEmpty()) {
                return LocalDate.parse(string, dateFormatter);
            } else {
                return null;
            }
        }
    });
    return null;
}

Работало отлично.Мне пришлось использовать параметр, так как в настоящее время я использую 5 DatePicker.

0 голосов
/ 22 мая 2018

Не форматируйте дату для вставки в базу данных SQL.Предполагая, что столбец вашей базы данных имеет тип данных date и вы используете по крайней мере Java 8 и по крайней мере JDBC 4.2, просто передайте LocalDate вашему PreparedStatement, как это:

    PreparedStatement insertStmt = myConnection.prepareStatement(
            "insert into my_table(purchase_date) values (?)");
    insertStmt.setObject(1, purchaseDate);

Ваш JDBCводитель позаботится обо всем остальном.Если вы используете JPA, ваша реализация JPA также позаботится об этом.

Если у вашего столбца есть тип символа (например, varchar(10)), и вы не можете изменить его, не придумывайте для него свой собственный формат.Сохраните дату в формате ISO 8601.LocalDate.toString() создает этот формат.

    String formattedDate = purchaseDate.toString();
    System.out.println(formattedDate);

В моем случае вывод был:

2017-11-29

В сторону, дляпрезентации для вашего пользователя, вы не должны изобретать свой собственный формат.Скорее полагайтесь на встроенные форматы в Java.Например:

    Locale turkish = Locale.forLanguageTag("tr");
    DateTimeFormatter dateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT)
            .withLocale(turkish);
    String formattedDate = purchaseDate.format(dateFormatter);
    System.out.println(formattedDate);

Вывод:

29.11.2017

Что не так в вашем коде?

Естьдве неправильные вещи:

  1. Вы использовали строчные буквы mm.Это означает минуту часа, и, поскольку LocalDate не имеет времени суток, оно выдает исключение, которое вы видели.Полученное сообщение является довольно точным:

    Неподдерживаемое поле: MinuteOfHour

    Вместо этого вы можете использовать прописные буквы MM для двузначного месяца.

  2. Вам нужно выбрать формат в String, возвращенном методом format.LocalDate является неизменным и поэтому не зависит от вызова метода.Также он не может иметь формат в нем.Это просто дата в календаре.

Ссылка: Статья в Википедии: ISO 8601

...