Java日期格式和SimpleDateFormat返回的日期是不正确
-
19-09-2019 - |
题
今天是星期二,二月9 2010年当我打印的日期我得到了错误的日期:
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());
印刷线路的结果:"今天是周六扬09 00:00:00科技委2010年"
它肯定不是星期六扬09,这是星期二月09.我假设我在做的事情是错误的,因此任何人都可以让我知道什么是错误在这里?我必须手动设置的一天一周?
更新
注:我不想今天来初始化 new Date()
因为我想要个小时,分钟,毫秒秒和初始化 0
.这是必要的,这样我就可以比较的用户输入日期的今天:如果用户输入今天的日期我和使用的格式,以建造一个新的对象,那么,如果我今天来初始化 new Date()
我比较两个日期--今天会 后 用户选择的日期(这是不正确的).因此,我需要初始化在今天一天的开始而不hr/min/sec/ms。
解决方案
令人混淆,日历月最从0(January)11(二月),所以你就是传递"2010-01-09"到格式化程序。分析()当你提取的每月领域的日历。
有一个讨论这一在一个相关的 所以问题.
其他提示
如果你不想使用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();
不隶属于 StackOverflow