【问题标题】:SimpleDateFormat Query简单日期格式查询
【发布时间】:2013-02-12 09:43:20
【问题描述】:

我有以下sn-p

Date date=null;
    SimpleDateFormat sdf=new SimpleDateFormat("dd-MM-yyyy");
    try {
        date= sdf.parse("2001-02-2012");
        System.out.println(date);
    } catch (ParseException ex) {
        ex.printStackTrace();
    }

奇怪的是它不会抛出解析异常,不是吗?

【问题讨论】:

  • 这是java.text.SimpleDateFormat吗?它没有 1 参数 parse 函数。
  • @poitroae:是的 - 继承自 DateFormat。
  • 试试sdf.setLenient(false); - see

标签: java


【解决方案1】:

问题在于您的输入有点出乎意料。 SimpleDateFormat 然后尝试以有用的方式解释它。因此,在您的情况下,2001 天会简单地转换为周、月和年。你的日期是Mon Jul 24 00:00:00 GMT 2017。你可以在ideone上查看:http://ideone.com/bfgogz

要“修复”它,您可以添加 sdf.setLenient(false); 以仅接受与您指定的方式完全相同的输入。

【讨论】:

    【解决方案2】:

    累加。到文档:

    public Date parse(String source) throws ParseException
    

    从给定字符串的开头解析文本以生成日期。 该方法可能不会使用给定字符串的整个文本

    throw ParseException - 如果指定字符串的开头无法解析。

    见:DateFormat

    【讨论】:

      【解决方案3】:

      如果你不宽容地解析它,它会抛出ParseExceptionDateFormat#setLenient(false) 也知道严格解析

      指定日期/时间解析是否宽松。和 宽松的解析,解析器可以使用启发式来解释输入 与此对象的格式不完全匹配。通过严格的解析, 输入必须匹配此对象的格式。

      Documentation -

      SimpleDateFormat sdf=new SimpleDateFormat("dd-MM-yyyy");
      sdf.setLenient(false);
      try{
          date = sdf.parse("2001-02-2012");
          System.out.println(date);
      } catch (ParseException ex) {
          ex.printStackTrace();
      }
      

      结果 -

      java.text.ParseException: Unparseable date: "2001-02-2012"
      

      注意:默认情况下Dateformat/SimpleDateFormat 解析宽松。

      【讨论】:

        猜你喜欢
        • 2012-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多