Java DateFormat和SimpleDateFormat返回不正确的日期

Kir*_*ril 0 java date date-format simpledateformat

今天是2010年2月9日星期二,当我打印日期时,我收到了错误的日期:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

Date today = formatter.parse(String.format("%04d-%02d-%02d",
        Calendar.getInstance().get(Calendar.YEAR),
        Calendar.getInstance().get(Calendar.MONTH),
        Calendar.getInstance().get(Calendar.DAY_OF_MONTH)));

System.out.println("Today is " + today.toString());
Run Code Online (Sandbox Code Playgroud)

打印行导致:"今天是2010年1月9日00:00:00 CST 2010"

它肯定不是09年1月9日星期六,也就是2月9日星期二.我假设我做错了什么,所以有人能让我知道这里有什么问题吗?我是否必须手动设置星期几?

更新 注意:我今天不想初始化,new Date()因为我希望初始化为小时,分钟,秒和毫秒0.这是必要的,所以我可以将用户输入日期与今天进行比较:如果用户输入今天的日期并且我使用格式化程序来构造Date对象,那么如果我今天初始化new Date()并且我比较两个日期 - 今天将用户之后选定日期(不正确).因此,我需要在没有hr/min/sec/ms的情况下在今天开始时进行初始化.

mar*_*ton 9

令人困惑的是,日历月数从0(1月)到11(12月),因此当您从日历中提取MONTH字段时,您将"2010-01-09"传递给formatter.parse().

在相关的SO问题中对此进行了讨论.