【问题标题】:Spring mvc custom date format based on locale基于语言环境的 Spring mvc 自定义日期格式
【发布时间】:2014-03-16 23:40:54
【问题描述】:

这是我的控制器:

@InitBinder
protected void initBinder(final WebDataBinder binder) {
    DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, new Locale("lt"));
    dateFormat.setLenient(true);
    CustomDateEditor editor = new CustomDateEditor(dateFormat, true);
    binder.registerCustomEditor(Date.class, editor);
}

当我提交表单时,我收到一条错误消息:

无法将 java.lang.String 类型的属性值转换为必需的 为属性 dateFrom 键入 java.util.Date;嵌套异常是 org.springframework.core.convert.ConversionFailedException: 失败 从 java.lang.String 类型转换为 java.util.Date 类型以获得值 2014-02-20;嵌套异常是 java.lang.IllegalArgumentException

如何解决这个问题?

【问题讨论】:

    标签: java spring-mvc


    【解决方案1】:

    您的解决方案不起作用,因为 lt 语言环境具有类似 yy.M.d 的日期模式

    您的 dateFrom 值为 2014-02-20,而您的 DateFormat 正在尝试使用以下日期模式进行转换。

    尝试在您的 dateFrom 参数中添加类似 14.02.20 的内容,这样应该可以工作。

    【讨论】:

    • 这是 lt - 立陶宛语区域设置,而不是意大利语。
    【解决方案2】:

    Short 的意大利默认日期格式为 dd/mm/yyyy 。参考Wiki。如果您将输入提交为 20/02/2014 ,那么您会很好。

    你也可以像这样测试。

        DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, Locale.ITALY);
        dateFormat.setLenient(true);
        CustomDateEditor editor = new CustomDateEditor(dateFormat, true);
        editor.setAsText("20/02/2012");
    

    或使用 SimpleDateFormat 并指定您的格式。

    【讨论】:

      猜你喜欢
      • 2019-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      • 2015-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多