Как получить значение времени из формы JSP и "вставить его" в объект сущности db - PullRequest
2 голосов
/ 01 августа 2020

Одна из сущностей в моем приложении имеет элемент Time (столбец TIME в mysql db). Я хотел бы иметь возможность читать это значение времени из формы jstl (как и любую другую строку), поэтому Spring может вставить его в этот член времени с помощью установщика (как и для других членов). Более того, я хотел бы иметь возможность применить к нему некоторую фильтрацию, чтобы я мог ввести как 01:00, так и 1:00 и преобразовать его в 01:00.

Какой класс времени мне использовать? LocalTime, java. sql .Time или любой другой?

Как применить шаблон к считанному значению? Должен ли я сделать это в контроллере, или я могу сделать это внутри установщика или около того?

Я встречал несколько способов чтения времени из jsp, но я не могу найти решение для применения шаблона .

1 Ответ

1 голос
/ 01 августа 2020
  1. Поскольку вы хотите сэкономить время в настраиваемом формате, я предлагаю вам изменить тип столбца на символьный (например, CHAR или VARCHAR).
  2. Затем вы можете определить форматы для строк ввода (из JSP) и вывода (в DB) с использованием DateTimeFormatter.

Демо:

import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        // Test strings
        String[] times = { "1:00", "01:00", "1:00 pm", "1:00 am", "01:00 am", "01:00 pm" };

        // Define the formatter
        DateTimeFormatter inputFormatter = new DateTimeFormatterBuilder()
                                                .parseCaseInsensitive()
                                                .appendPattern("[h:m a][H:m]")
                                                .toFormatter(Locale.ENGLISH);

        DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("HH:mm");

        for (String strTime : times) {
            LocalTime lt = LocalTime.parse(strTime, inputFormatter);

            // String to be saved to the database
            String formattedTime = lt.format(outputFormatter);
            System.out.println(formattedTime);
        }
    }
}

Вывод:

01:00
01:00
13:00
01:00
01:00
13:00

Примечания:

  1. Вы можете добавить другие узоры, поместив их в [ ], как показано выше.
  2. Для этой демонстрации я предполагал, что вы хотите сохранить время в формате HH:mm (т.е. 24-часовом).
...