如何从 JSP 表单和 "inject it" 中检索时间值到数据库实体对象

How to retrieve Time value from JSP form and"inject it" into db entity object

我的应用程序中的一个实体具有 Time 成员(mysql db 中的 TIME 列)。我希望能够从 jstl 表单中读取该时间值(就像任何其他字符串一样),因此 Spring 可以使用 setter(对于其他成员)将其注入该时间成员。此外,我希望能够对其应用一些过滤,因此我可以同时输入 01:00 和 1:00,并将其转换为 01:00.

我应该使用什么时间 class? LocalTime,java.sql.Time 或任何其他?

如何将模式应用于读取的值?我应该在控制器中进行,还是可以在 setter 左右进行?

我从 jsp 那里遇到过多种读取时间的方法,但我似乎找不到应用模式的解决方案。

  1. 既然你想在自定义格式中节省时间,我建议你将列类型更改为字符类型(例如CHARVARCHAR)。
  2. 接下来,您可以使用 DateTimeFormatter.
  3. 定义输入(从 JSP)和输出(到 DB)字符串的格式

演示:

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 小时制)格式保存时间。