我在Java中设置日期时发现了一个异常。
我正在尝试以下操作:-
Date date1 = new Date("10/12/2018");
因此,当我打印日期时,它将是未来 它的印刷日期是:-2019年6月14日。
当我执行以下操作时:-
Date date1 = new SimpleDateFormat("dd/MM/yyyy").parse("10/12/2018");
它显示确切的日期。谁能解释为什么会这样吗? 预先感谢。
答案 0 :(得分:1)
Date()构造函数(注意:已过时!)不知道什么是月份和年份。
美国:月/日/年,而欧洲为日/月。
在第二种形式中,您是明确的。在第一种形式中,它选择了错误的形式。
答案 1 :(得分:0)
要对日期进行硬编码,请执行以下操作:
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。