【发布时间】:2019-07-13 09:28:50
【问题描述】:
在 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
【问题讨论】:
-
在传递给mysql的时候不要把你的日期变成字符串;使用具有日期类型参数的参数化查询,并传递您从 http 查询字符串表示中解析的 java 日期
-
您能否阐明您的解决方案或发布一个我可以修改的示例 sn-p?
-
我建议你不要使用
Date和SimpleDateFormat。这些类设计不佳且早已过时,后者尤其是出了名的麻烦。而是使用来自java.time, the modern Java date and time API 的LocalDate和DateTimeFormatter。