java - 将 HTML 输入类型 DATE 转换为 MYSQL DATE

标签 java html mysql date

在 HTML/Java/SQL 中来回转换日期对象有困难:

我有一个包含对象类型 LocalDate 的类。

在 HTML 中,用户输入 mm/dd/yyyy,例如 01/19/1993

但是MYSQL只接受日期格式yyyy-MM-dd

所以我检索我的日期作为 httpservletrequest 的一部分,并在添加到数据库或从中加载时尝试来回转换。

非常感谢任何帮助。

HTML:

<form action="PaymentControllerServlet" method="GET">
                <input type="hidden" name="command" value="ADD" />

                <table>
                    <tbody>
                        <tr>
                            <td><label>Company Name:</label></td>
                            <td><input type="text" name="companyName" /></td>
                        </tr>
                        <tr>
                            <td><label>Company Phone:</label></td>
                            <td><input type="text" name="companyNumber" /></td>
                        </tr>
                        <tr>
                            <td><label>Bill Amount:</label></td>
                            <td><input type="text" name="paymentAmount" /></td>
                        </tr>
                        <tr>
                            <td><label>Due Date:</label></td>
                            <td><input type="date" name="paymentDueDate" /></td>
                        </tr>

Java:

// 1)Retrieve date as a String, parse the String into actual Date object
        Date  date1 = new SimpleDateFormat("MM-dd-yyyy").parse(request.getParameter("paymentDueDate"));

        // 2)Create a new DateFormat("yyyy-MM-dd") - For mySQL format
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        // 3)Convert my Date obj into String, and change to ("yyyy-MM-dd") format

        String myStringdate = sdf.format(date1);

        // 4)Convert String back to date obj

        Date finishedDate = (Date)sdf.parse(myStringdate);

        // 5)Convert to localDate
        LocalDate dueDate = finishedDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        // 6)Send to MYSQL database. 
        //Initial user html input = 01/19/1993, 
        //date entered in mysql database = 0184-12-31

最佳答案

智能对象,而不是哑字符串

停止转动你的轮子来操纵琴弦。在与数据库交互时使用对象。

切勿使用 DateSimpleDateFormat。仅使用 java.time 类。

截至JDBC 4.2 ,我们可以直接与数据库交换一些 java.time 类型。

首先,解析您的输入字符串。

String input = "01/23/2019";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MM/dd/uuuu" ) ;
LocalDate ld = LocalDate.parse( input , f ) ;

通过准备好的语句中的 ? 占位符传递。

myPreparedStatement.setObject( … , ld ) ;

检索。

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

所有这些已经在 Stack Exchange 上多次介绍过。搜索以了解更多信息。


关于java.time

java.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧类 legacy日期时间类,例如 java.util.Date , Calendar , & SimpleDateFormat .

Joda-Time项目,现在在maintenance mode , 建议迁移到 java.time类。

要了解更多信息,请参阅 Oracle Tutorial .并在 Stack Overflow 中搜索许多示例和解释。规范为 JSR 310 .

您可以直接与您的数据库交换java.time 对象。使用JDBC driver符合 JDBC 4.2或以后。不需要字符串,不需要 java.sql.* 类。

从哪里获得 java.time 类?

ThreeTen-Extra项目用附加类扩展 java.time。该项目是 future 可能添加到 java.time 的试验场。您可能会在这里找到一些有用的类,例如 Interval , YearWeek , YearQuarter , 和 more .

关于java - 将 HTML 输入类型 DATE 转换为 MYSQL DATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54773671/

相关文章:

Java:数组索引越界异常2

java - 你能以编程方式检测白噪声吗?

html - 如何为导航选项卡的事件选项卡设置样式

java - 在程序完成之前出现异常详细信息?

html - 将单个输入表单分成不同的部分

javascript - jQuery ui 可排序嵌套排序中不准确的占位符放置

PHP session 、超时和跟踪

mysql - phpmyadmin MariaDb Alter table 语法错误

php - 偏移量 0 对 MySQL 结果索引 64 无效(或者查询数据是无缓冲的)

java - 我需要关闭连接吗