【发布时间】:2017-12-06 15:50:45
【问题描述】:
我试图简单地传递一个日期并使用 simpledateformat 解析它。但不是打印正确的值,而是打印错误的日期。
public static void main(String[] args) {
getAge("29-02-2016");
}
public static void getAge(String dob1) {
DateFormat format = new SimpleDateFormat("dd-mm-yyyy");
try {
Date dob = format.parse(dob1);
System.out.println(dob);
Calendar realDob = Calendar.getInstance();
realDob.setTime(dob);
System.out.println(realDob.get(Calendar.YEAR));
Calendar today = Calendar.getInstance();
int age = today.get(Calendar.YEAR) - realDob.get(Calendar.YEAR);
if(age >=18) {
System.out.println("18 years");
} else {
System.out.println("Underage");
}
} catch (ParseException e) {
e.printStackTrace();
}
}
它的打印:Fri Jan 29 00:02:00 IST 2016 但它应该是February
【问题讨论】:
-
每周都会询问同样的错误。
-
mm表示分钟。当SimpleDateFormat的行为不符合您的预期时,请务必仔细阅读文档。 -
Sample Google search for similar questions -- 请检查一下,并在询问之前考虑使用类似的搜索。
-
SimpleDateFormat类不仅过时已久,而且出了名的麻烦。我强烈建议你扔掉它,以及它的老朋友Date和Calendar。java.time, the modern Java date and time API also known as JSR-310,使用起来更好。此外,如果你在现代 API 上犯了同样的错误,它会告诉你你错了。我认为这已经比给你一个错误的结果并假装一切都好。 -
顺便说一句,如果一个人出生于 1999 年,您的代码 sn-p 似乎接受 18 岁,无论他/她的生日是否在当年晚些时候。虽然在今年晚些时候这可能没什么大不了的,但在 1 月份开始接受所有 2000 年出生的人时可能会很重要。
标签: java calendar simpledateformat