Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DateFormat和SimpleDateFormat返回的日期不正确_Java_Date_Date Format_Simpledateformat - Fatal编程技术网

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

Java DateFormat和SimpleDateFormat返回的日期不正确,java,date,date-format,simpledateformat,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(Ca

今天是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());
打印行的结果是:“今天是2010年1月9日星期六00:00:00 CST”

这肯定不是09年1月的星期六,而是09年2月的星期二。我假设我做错了什么,有人能告诉我这里出了什么问题吗?我必须手动设置星期几吗

更新
注意:我今天不想用
new Date()
初始化,因为我想将小时、分钟、秒和毫秒初始化为
0
。这是必要的,这样我就可以比较用户输入的日期和今天的日期:如果用户输入今天的日期,我使用格式化程序构造一个日期对象,那么如果我使用
new date()
初始化今天并比较这两个日期,那么今天将在用户选择的日期之后(这是不正确的)。因此,我需要在一天开始时初始化今天,而不使用hr/min/sec/ms。

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


在一篇相关的文章中对此进行了讨论。

如果您不想使用JodaTime,您可以使用:

Calendar calendar = Calendar.getInstance();

calendar.set( Calendar.HOUR_OF_DAY, 0 );
calendar.set( Calendar.MINUTE, 0 );
calendar.set( Calendar.SECOND, 0 );
calendar.set( Calendar.MILLISECOND, 0 );

Date today = calendar.getTime();
与字符串格式化/解析方法相比,这种方法效率更高,也更不容易出错

如果您可以使用JodaTime,这是一种非常首选的方法:

LocalDate date = new DateTime().toLocaleDate();

你到底为什么要这样说“今天”?为什么不今天日期=新日期()?你的路很长,正如你所见,甚至不正确。@duffymo它在JSP中。假设用户选择今天作为他们想要的日期,那么他们的输入被转发到另一个JSP。用户输入是在我在第二个jsp中初始化今天的日期之前记录的(使用new date()将其初始化为用户输入之后的当前时间),因此今天将始终在用户选择的日期之后,即使用户选择了同一天。因此,我需要今天初始化,并将hr/min/sec/ms保持在0。听起来第二个JSP应该从第一个JSP的HTTP请求解析“今天”,而不是调用“新日期”。如果答案不清楚,那是因为你的问题和要求也不清楚。@duffymo谢谢你,我会记住的。谢谢Mtpetyp!那看起来比我的好多了!:)