如何检查日期是用美国格式的java

时间:2015-07-11 09:05:55

标签: java excel date apache-poi

用户输入日期如下:

20/05/2015

现在我们知道美国格式的日期无效。 我如何在java中检查? 在我的代码中,我从excel表中获取日期值,目前这就是我正在处理它的方式。从Excel工作表中读取的日期是数字。例如-3124.0即,没有。自1990年1月1日以来的几天。我将其转换为MM / dd / yyy格式:

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/YYYY");
String s = sdf.format(cell.getDateCellValue());
SimpleDateFormat的

格式方法将日期作为参数。因此,cell.getDateCellValue()给出了日期类型值,该值传递给format方法,该方法将其转换为字符串值。

 SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/YYYY");
 String s = sdf.format(cell.getDateCellValue());
 System.out.println(s);   
 sdf.setLenient(false);
 Date d=    sdf.parse(s);
 System.out.println(sdf.format(d));

所以现在如果excel单元格值是12/08/2015

System.out.println(s);  // prints 12/08/2015

System.out.println(sdf.format(d)); //Prints 12/28/2015

不明白。

2 个答案:

答案 0 :(得分:1)

如果你的日期是字符串,你可以试试这个正则表达式:

    String date ="20/11/2015";  

    private static final String DATE_PATTERN =
        "(0?[1-9]|1[012])/(0?[1-9]|[12][0-9]|3[01])/((19|20)\\d\\d)";

    pattern = Pattern.compile(DATE_PATTERN);
    matcher = pattern.matcher(date);
    if(matcher.matches()){
        System.out.println("mateched");
    }else {
        System.out.println("not matched");
    }

如果必须多次执行此操作,请将pattern设为静态并编译一次(可能在构造函数或静态块中)。

答案 1 :(得分:0)

执行简单的日期格式后,使用以下代码段验证它。 如果您还需要其他日期格式,请使用正则表达式。

    SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/YYYY");
    s = sdf.format(cell.getDateCellValue());

    Pattern datePattern = Pattern
            .compile("^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\\d\\d$");
    Matcher matcher = datePattern.matcher(s);

    LOG.info("Valid Date:" + matcher.find());