Java中的硬编码日期异常

时间:2019-04-02 06:55:14

标签: java date

我在Java中设置日期时发现了一个异常。

我正在尝试以下操作:-

Date date1 = new Date("10/12/2018");

因此,当我打印日期时,它将是未来 它的印刷日期是:-2019年6月14日。

当我执行以下操作时:-

Date date1 = new SimpleDateFormat("dd/MM/yyyy").parse("10/12/2018");

它显示确切的日期。谁能解释为什么会这样吗? 预先感谢。

2 个答案:

答案 0 :(得分:1)

Date()构造函数(注意:已过时!)不知道什么是月份和年份。

美国:月/日/年,而欧洲为日/月。

在第二种形式中,您是明确的。在第一种形式中,它选择了错误的形式。

答案 1 :(得分:0)

java.time

要对日期进行硬编码,请执行以下操作:

    LocalDate date2 = LocalDate.of(2018, Month.OCTOBER, 12);
    System.out.println("Harcoded date: " + date2);

您将永远不会怀疑月份,日期和年份。输出为:

  

编码日期:2018-10-12

您应避免设计不良且过时的Date类,甚至应避免使用其过时的构造函数。取而代之的是,我使用Java.time(现代Java日期和时间API)中的LocalDate。此外,LocalDate代表一个日历日期(没有一天中的时间),与Date相反,Fri Oct 12 00:00:00 CEST 2018尽管它的名字代表一个时间点。

顺便说一句,我无法重现您的问题。我得到{{1}}(虽然文档的这一部分非常难以阅读和理解,但也与文档一致)。

链接: Oracle tutorial: Date Time解释了如何使用java.time。