Java年份日期是可解析的内部字母

时间:2012-07-31 12:39:41

标签: java spring

我编写了NotLenientDateEditor,它扩展了CustomDateEditor

public NotLenientDateEditor(DateFormat dateFormat, boolean allowEmpty, int exactDateLength) {
    super(dateFormat, allowEmpty, exactDateLength);
    dateFormat.setLenient(false);

现在我需要添加一个功能,因为当我启用了javascript时,Date 12.1.20asa21不可解析,但是当禁用javascript时,此日期可解析为12.1.20。

你可以帮助我,如何添加不解析年份的功能包含字母

2 个答案:

答案 0 :(得分:0)

这个实现似乎有效:

package net.orique.stackoverflow.question11740273;

import java.text.DateFormat;

import org.springframework.beans.propertyeditors.CustomDateEditor;

public class NotLenientDateEditor extends CustomDateEditor {

    public NotLenientDateEditor(DateFormat dateFormat, boolean allowEmpty,
            int exactDateLength) {
        super(dateFormat, allowEmpty, exactDateLength);
        dateFormat.setLenient(false);
    }

}

使用main方法的类:

package net.orique.stackoverflow.question11740273;

import java.text.SimpleDateFormat;

public class Main {

    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("dd.m.yy");
        NotLenientDateEditor n = new NotLenientDateEditor(sdf, false, 7);

        n.setAsText("12.1.20"); // Ok
        n.setAsText("12.1.20asa21"); // Throws java.lang.IllegalArgumentException
    }

}

注意:

如何实例化NotLenientDateEditor?您为DateFormat设置了哪种格式?请注意month构造函数参数的7exactDateLength的单个数字。

答案 1 :(得分:0)

这是有效的,但它可以使文件12.1.2a(它从12.2.02开始,这是我的问题)。我以这种方式初始化NotLenientEditor

public void initBinder(WebDataBinder binder) {
    SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy");
    NotLenientDateEdtor editor = new NotLenientDateEdtor(format, false, 10);
    binder.registerCustomEditor(Date.class, editor);
}