用户输入日期如下:
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
不明白。
答案 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());