当前位置: 首页 > 面试题库 >

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

孔和畅
2023-03-14
问题内容

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

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,但是我也看到月份不同,所以我想避免检查日期字符串中整数数组的每个元素。是否可以在Calendar或date对象中自动解析它们?


问题答案:

您可以像下面这样为不同的String格式构造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;
}


 类似资料:
  • 问题内容: 我有像 如何检查字符串是否为日期? 使用正则表达式检查String是否为数字 问题答案: 其他人也是正确的 这是你的答案

  • 更新: 这是否意味着,如果我想检查一个特定的字符串是否是有效的日期时间,我需要一个巨大的格式数组??会有不同的组合,我相信。 即使有很多日期分隔符('.'、'/'、'-'等)根据区域性的不同,我很难定义要检查的格式数组。 基本上,我想检查一个特定的字符串是否至少包含日(1到31或01到31)、月(1到12或01到12)和年(yyyy或yy),以任何顺序,使用任何日期分隔符,解决方案是什么? 所以,

  • 问题内容: 我很好奇,用Java 创建对象的最明显的方法已被弃用,并且似乎已被使用宽大日历的不太明显的方法“替代”。 如何检查以日,月和年的组合形式给出的日期是否为有效日期? 例如,2008-02-31(如yyyy-mm-dd)将是无效日期。 问题答案: 当前的方法是使用日历类。它具有setLenient方法,该方法将验证日期和引发异常,如果超出示例,则抛出异常。 忘记添加:如果您获得日历实例并使

  • 问题内容: 检查值是否为有效日期(允许使用任何已知的日期格式)的简便方法是什么。 比如我有值,,它都应该被视为日期值,和值,,,不应被视为一个日期值。如果可能的话,最简单的检查方法是什么?因为时间戳也将被允许。 问题答案: 作为此副本的副本而被关闭,因此我认为在此处添加一些新信息很重要。我之所以写它,是因为我害怕人们会真正复制并粘贴此处发布的一些代码并在生产中使用它。 此处的大多数答案都使用一些仅

  • 问题内容: 是否有任何函数可以像MSSQL中那样返回给定字符串是否为日期? 问题答案: 您可以创建一个函数: 然后,您可以像这样使用它:

  • 问题内容: 我试图确定用户输入的内容是否包含有效或有效的内容。如果输入是an 或a,则程序应声明。 这是我的代码: 编辑:对不起,困惑的家伙。““令牌[]”是一个字符串数组。 如果用户输入make = number ( 数字 为),我试图让我的程序打印“ Invalid Make” 问题答案: 您可以编写一个函数来测试它,方法是在不喜欢它时调用并捕获(它将处理和值) 那你可以这样称呼它 而有实力的