java - 如何检查日期字符串的有效性?

标签 java validation date

在我的项目中,我需要检查日期字符串是否计算为正确的日期对象。我决定允许 yyyy-MM-dd 和日期格式 [(年、月、日) 和 (年、月、日、小时、分钟)]。我如何检查它们是否有效?我的代码为“1980-01-01”和一些奇怪的日期(如 3837.05.01)返回 null,这些日期给出了用逗号分隔的字符串:

private Date parseDate(String date){
    Date data = null;

    // yyy-mm-dd
    try {
        DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
        df.setLenient(false);
        df.parse(date);
        return data;
    }
    catch (Exception e) {
        try{
            int[] datArr = parseStringForDate(date);
            int len = datArr.length;
            // year, month, day
            if(len == 3){
                return new Date(datArr[0], datArr[1], datArr[2]);
            }
            // year, montd, day, hours, mins
            else if(len ==5){
                return new Date(datArr[0], datArr[1], datArr[2], datArr[3], datArr[4]);
            }
            // year, month, day, hours, mins, secs
            else if(len == 6){
                return new Date(datArr[0], datArr[1], datArr[2], datArr[3], datArr[4], datArr[5]);
            }
            else {
                return data;
            }
        }
        catch (Exception f){
            return data;
        }
    }
}

private int[] parseStringForDate(String s){
    String[] sArr = s.split(",");
    int[] dateArr = new int[sArr.length];

    for(int i=0; i< dateArr.length; i++){
        dateArr[i] = Integer.parseInt(sArr[i]);
    }

    return dateArr;
}

我记得我必须从年份日期中减去 1900,但我也看到月份不同等,并且我想避免从日期字符串中检查整数数组的每个元素。是否可以在日历或日期对象中自动解析它们?

最佳答案

您可以构造 SimpleDateFormat不同字符串格式的对象,如下所示(如果参数无法解析为有效日期,则返回 null):

// Initializing possibleFormats somewhere only once
SimpleDateFormat[] possibleFormats = new SimpleDateFormat[] {
  new SimpleDateFormat("yyyy-MM-dd"),
  new SimpleDateFormat("yyyy,MM,dd"),
  new SimpleDateFormat("yyyy,MM,dd,HH,mm") };
for (SimpleDateFormat format: possibleFormats)
{
  format.setLenient(false);
}
// initializing ends

public Date parseDate(String date) {
  Date retVal = null;
  int index = 0;
  while (retVal == null && index < possibleFormats.length) {
    try {
      retVal = possibleFormats[index++].parse(date);
    } catch (ParseException ex) { /* Do nothing */ }
  }
  return retVal;
}

关于java - 如何检查日期字符串的有效性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4010258/

相关文章:

java - 在java接口(interface)中使用实现类型

javascript - JQuery:验证表单中的所有输入

java - 使用 JNLP 启动 Applet 时找不到类异常

java - Jmeter 错误 : org. apache.http.conn.HttpHostConnectException : Connection to http://www. google.com 拒绝

java - 根据指定顺序添加列表的更有效方法

twitter-bootstrap - Bootstrap 电子邮件验证

javascript - 在提交表单之前对输入标签执行验证

r - Rscript 调用出错,但 R IDE 不出错

javascript - JavaScript new Date() 使用什么时区?

javascript - javascript new Date(string) 的不同行为