【发布时间】:2019-04-08 15:14:01
【问题描述】:
我正在想办法解决 Input type=date 的问题。我知道输入显示在浏览器中有所不同,以澄清我为此使用 Google Chrome 的内容。所以我的简单表格是这样的:
<input type="date" name="startingdate" class="form-control" id="startingdate"/>
我的控制器是这样的:
public ModelAndView getDate(@FormParam("startingdate") String startingdate) {
System.out.println(startingdate);
}
chrome中显示的格式是mm/dd/yyyy,这是我想要的,但是当我以字符串格式从html获取值到我的控制器时,它突然变成yyyy-mm-dd。
例如,当我输入09/11/2018 时,它在控制器中变为2018-11-09,并在将其传递到我的数据库时变为0011-08-18。在我的控制器获取日期值之前,是否有任何其他方法可以修复格式,而无需更改数据库上的日期格式或使用 simpledateformat 进行解析?
我的印象是这只是格式的问题,但如果我完全错过了什么,我愿意接受建议。
谢谢!
更新:实际问题出在起始日期的后端解析上,它完全在我的眼皮底下。通过使用修复了这个问题:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date startingdateparsed = format.parse(startdate);
java.sql.Date startdatingparse = new java.sql.Date(startingdateparsed.getTime());
感谢您的时间和见解!
【问题讨论】:
-
日期字段以 ISO-8601 格式提交日期(因此它是标准的),
2018-11-09正是如此。@FormParam也不是来自 Spring,所以您可能正在使用 Jersey,所以不确定您在混合什么。在 Spring 中,您将使用@RequestParam而不是String使用Date或LocalDate,Spring 将为您进行转换。 -
这种行为是否会导致所有浏览器?您是否尝试将
startingdate参数设置为 Date 而不是 String ? -
啊,是的,我将@RequestParam 设为日期,并通过 json 以字符串格式将其传递给我的服务器。我刚刚发现我的服务器端的解析是原因并正在尝试修复它。