首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SimpleDateFormat查询

SimpleDateFormat查询
EN

Stack Overflow用户
提问于 2013-02-12 17:43:20
回答 3查看 111关注 0票数 3

我有以下代码片段

代码语言:javascript
复制
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();
    }

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-12 17:53:08

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

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

票数 3
EN

Stack Overflow用户

发布于 2013-02-12 17:48:06

Acc.至文档:

代码语言:javascript
复制
public Date parse(String source) throws ParseException

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

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

请参阅:DateFormat

票数 2
EN

Stack Overflow用户

发布于 2013-02-12 17:50:35

如果你不严格地解析它,它会抛出ParseException。严格解析也是众所周知的严格解析

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

Documentation -

代码语言:javascript
复制
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();
}

结果-

代码语言:javascript
复制
java.text.ParseException: Unparseable date: "2001-02-2012"

注意:默认情况下,Dateformat/SimpleDateFormat会进行宽松的解析。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14829545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档