【问题标题】:Input type date passing to controller in a different format以不同格式传递给控制器​​的输入类型日期
【发布时间】: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 使用 DateLocalDate,Spring 将为您进行转换。
  • 这种行为是否会导致所有浏览器?您是否尝试将 startingdate 参数设置为 Date 而不是 String ?
  • 啊,是的,我将@RequestParam 设为日期,并通过 json 以字符串格式将其传递给我的服务器。我刚刚发现我的服务器端的解析是原因并正在尝试修复它。

标签: java mysql spring html


【解决方案1】:

HTML5 中date 字段的显示格式与实际的value 存在差异。 (参见this question)。

所以没有办法改变浏览器发送的格式,因为它被严格定义为yyyy-MM-dd。显示基于浏览器区域设置。

简而言之,将您的后端更改为始终解析 yyyy-MM-dd 而不是您现在所期望的。

【讨论】:

  • 是的,我最终在后端使用它来匹配控制器 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); java.util.Datestartingdateparsed = format.parse(startingdate); java.sql.Date startingdateparse = new java.sql.Date(startingdateparsed .getTime());感谢您的见解!
  • 不要这样做,只需将您签名中的String 更改为LocalDateDate,框架就会为您执行此操作。
  • 我从一开始就尝试将 LocalDate 用于我的实体,但它变成了一个小块,所以我没有使用它。
  • 然后修复实体中的映射(并使用支持它的 ORM 映射器版本)。您目前正在做很多不应该做的手工工作。
  • 猜想我应该在使用 LocalDate 之前对其进行测试。它看起来很适合这类事情,我不需要导入 SimpleDateFormat、date.util 和 date.sql 来进行普通的日期解析。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多