【问题标题】:How to force dateFormat to take exactly the specified number of characters as valid?如何强制 dateFormat 将指定数量的字符视为有效字符?
【发布时间】:2012-11-22 22:31:08
【问题描述】:

以下代码...

SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
df.setLenient(false);
Date date = df.parse("2012115");

...将字符串 "2012115" 解析为相当于 2012 年 11 月 5 日的日期。我希望它无法解析,因为它缺少一天字符。换句话说,我只希望字符串 "20121105" 计算到那个日期。除了评估字符串的长度之外,有没有办法强制执行此操作?

【问题讨论】:

    标签: java date formatting simpledateformat


    【解决方案1】:

    ...将字符串“2012115”解析为相当于 2012 年 11 月 5 日的日期。我希望它无法解析,因为它缺少一天字符。换句话说,我只希望字符串“20121105”计算到那个日期。

    我怀疑你只能使用格式化程序来做到这一点。作为一种解决方法,你可能需要在解析之前检查日期字符串长度,如下所示:

          String dateString = "2012115";
          String formatString = "yyyyMMdd";
          if(dateString == null || dateString.length() != formatString.length()){
             throw new ParseException("Invalid Date Input", 0);
          }
          SimpleDateFormat formatter= new SimpleDateFormat(formatString);
          formatter.setLenient(false);
          Date date = df.parse(dateString);    
    

    【讨论】:

    • 谢谢,Yogendra——我就是这么想的。在将您的答案标记为正确之前,我会再等一会儿,希望它不是;-)。
    【解决方案2】:

    您实际上可以再次格式化并检查它们是否相同

    SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
    df.setLenient(false);
    String dstr = "2012115";
    Date date = df.parse(dstr);
    String newdstr = df.format (date);
    if (!newdstr.equals(dstr)) {
       throw new ParseException ("bla bla");
    }
    

    【讨论】:

    • 我知道这是一个旧答案,但我不得不承认,它非常聪明,并且在我的情况下非常有效。
    猜你喜欢
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    相关资源
    最近更新 更多