首页 > 解决方案 > 如何从 HTML 表单中获取“日期”字段并将其转换为 MySQL 日期

问题描述

作为标题,我需要获取从 HTML 页面发送到 Servlet 的日期输入。在这个 servlet 中,我需要将此数据格式转换为 MySQL 格式。事实上,我认为我已经正确地完成了所有操作,但是,如果我引入 1970 年 1 月 1 日之前的日期,我就会遇到问题。

这是我从 HTML 页面解析日期时的代码:

 Date authorDateOfBirth1= null;
 try {
     authorDateOfBirth1= new SimpleDateFormat("yyyy-MM-dd").parse(request.getParameter("authorDateOfBirth1"));
 }
 catch (ParseException exceptionInParsingDate) {
        out.print("Error in parsing date author1 " + exceptionInParsingDate.getMessage());
 }

然后,每次我需要一个对象 Mysql Date 我使用:

statementAuthor.setDate(3, new java.sql.Date(authorDateOfBirth.getTime()));

非常感谢!

标签: javadatejspservlets

解决方案


您在数据库中的列应该是类型DATE

小心你的import陈述。您可能混淆了 Java 类型,java.sql.Date并且java.util.Date. 一个代表片刻,而另一个代表仅日期,但实际上是下面的片刻。不使用任何类。

您在 Java 中使用糟糕的日期时间类,这些类在几年前被现代java.time类所取代,并采用了 JSR 310。

您的班级的出生日期成员字段Author应该是类型LocalDate

对于没有时间和时区的仅日期值,请使用LocalDate.

LocalDate ld = LocalDate.parse( "1960-01-23" ) ;

使用 JDBC 4.2 和更高版本与数据库交换java.time对象。

myPreparedStatement.setObject( … , ld ) ;

从数据库中检索。

LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;

生成标准 ISO 8601 格式的文本。

String output = ld.toString() ;

要生成其他格式的文本,请参阅DateTimeFormatter课程。


推荐阅读