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

SimpleDateFormat和解析:解析不会因输入字符串日期错误而失败

牟黎昕
2023-03-14
问题内容

我正在使用

java.util.Date date;
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
try {
  date = sdf.parse(inputString);
} catch (ParseException e) {
  e.printStackTrace();
}

其中inputString的字符串是dd/MM/yyyy格式。

inputString例如,如果是40/02/2013,我将获得一个错误,而parse方法将返回Date
2013年3月12日(12/03/2013)。我在抱怨什么?


问题答案:

设置宽大处理位:

public void setLenient(boolean lenient)

指定日期/时间解析是否宽松。使用宽大的解析,解析器可以使用试探法来解释与该对象的格式不完全匹配的输入。在严格分析的情况下,输入必须与该对象的格式匹配。

如下代码:

import java.text.ParseException;
import java.text.SimpleDateFormat;

public class Tester {
    public static void main(String[] argv) {
        java.util.Date date;
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

        // Lenient
        try {
            date = sdf.parse("40/02/2013");
            System.out.println("Lenient date is :                  "+date);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        // Rigorous
        sdf.setLenient(false);

        try {
            date = sdf.parse("40/02/2013");
            System.out.println("Rigorous date (won't be printed!): "+date);
        } catch (ParseException e) {
            e.printStackTrace();
        }

    }
}

给出:

Lenient date is :                  Tue Mar 12 00:00:00 IST 2013
java.text.ParseException: Unparseable date: "40/02/2013"
    at java.text.DateFormat.parse(DateFormat.java:357)

笔记

  1. 如果对Java类有疑问,则应该阅读类文档。我不知道您问题的答案,我只搜索了该类,单击了parse方法链接,并注意到了 See Also 部分。 您应该始终先搜索,并在问题中提及您的发现
  2. 从宽日期有一个体面的历史绕过审查和激发孩子们的想象力。


 类似资料:
  • 下面是SimpleDateFormat的设置。 下面是开发人员文档中可解析日期字符串的可能差异列表。正如您所看到的,它们中没有一个在时区中有冒号。 我的第二个问题是当我得到一个时区设置为Z的日期字符串时,这是将时区设置为GMT的标准,相当于0000。然而,我又得到了一个ParseException。下面是日期字符串的一个示例。 提前致谢

  • 我尝试将字符串转换为日期。

  • 问题内容: 我正在尝试将UTC中的字符串格式日期转换为日期对象,这导致转换关闭了几分钟。 解析日期字符串之前- 解析后的日期是 正确的日期转换是 转换之间大约相差12-13分钟。我已经观察到转换在10分钟范围内的差异。 知道出了什么问题吗? 问题答案: 解析的是毫秒数,而不是您期望的毫秒数。 788810毫秒是13分钟,8秒和810毫秒。因此,您的结果实际上是2014-07-07T18:27:31

  • 问题内容: 我有一个名为的变量,它具有以下格式的今天的日期:。然后,将其格式化为MySQL的Date类型格式,即。这段代码可以做到: 我要做的是将其恢复为Date类型。我尝试了一些方法,但是它们没有用。主要解决方案是按照其他的问题中所述进行操作](http://codingdict.com/questions/2936),并通过一个小小的mod达到了我想要的功能: 但是它不起作用,因为尝试解析时出

  • 例如,我得到了这个日期字符串: 看起来Android无法解析某些时区。感谢@Burhanuddin Rashid的这种方法。 此处的解决方案:不可更改的日期:“IST 2014年星期五10月10日23:11:07”(偏移量20)

  • 问题内容: 我有字符串格式的日期,我想将其解析为使用日期。 我将其解析为: 但是奇怪的是,如果我传递的是“ 03-08- 201309 hjhkjhk ”或“ 03- 88 -2013”​​或 43 -88-201378,它不会抛出错误,而是对其进行解析。 为此,我必须编写正则表达式模式以检查日期的输入是否正确。但是为什么会这样呢? 代码: 问题答案: 您应该使用: 我不确定是否可以捕获 到 您想