【问题标题】:Wrong date is getting printed [duplicate]打印错误的日期[重复]
【发布时间】: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 类不仅过时已久,而且出了名的麻烦。我强烈建议你扔掉它,以及它的老朋友DateCalendarjava.time, the modern Java date and time API also known as JSR-310,使用起来更好。此外,如果你在现代 API 上犯了同样的错误,它会告诉你你错了。我认为这已经比给你一个错误的结果并假装一切都好。
  • 顺便说一句,如果一个人出生于 1999 年,您的代码 sn-p 似乎接受 18 岁,无论他/她的生日是否在当年晚些时候。虽然在今年晚些时候这可能没什么大不了的,但在 1 月份开始接受所有 2000 年出生的人时可能会很重要。

标签: java calendar simpledateformat


【解决方案1】:

mm 表示分钟,使用 MM: DateFormat format = new SimpleDateFormat("dd-MM-yyyy");

【讨论】:

    猜你喜欢
    • 2016-09-05
    • 1970-01-01
    • 2016-05-24
    • 2019-10-24
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多