我使用以下代码以yyyy-MM-dd格式计算当前年份值 但是下面的代码将 paramStartDate值指定为0001-01-01,这是不正确的 它应该是'2014-01-01'
else if(scopeSelected != null && scopeSelected.equalsIgnoreCase("Year To Date")){
Calendar calendarStart = Calendar.getInstance();
calendarStart.set(Calendar.YEAR,calendarStart.YEAR);
calendarStart.set(Calendar.MONTH,0);
calendarStart.set(Calendar.DAY_OF_MONTH,1);
Date startDate=calendarStart.getTime();
DateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
paramStartDate = dateFormat1.format(startDate);
setParamStartDate(paramStartDate);
}
答案 0 :(得分:10)
这是问题所在:
calendarStart.set(Calendar.YEAR,calendarStart.YEAR);
您将值设置为Calendar.YEAR
,这是值为1的常量。
如果您不想更改年份数,请完全删除此行。
(顺便说一句,我强烈建议使用Joda Time而不是内置的Java API.Joda Time 很多更清洁。)< / p>
编辑:对于添加一年的新要求,您可以使用
calendarStart.add(Calendar.YEAR, 1);
答案 1 :(得分:2)
你的表达式calendarStart.YEAR
是指Calendar.YEAR
这是一个值为1的常量。它不是年份!
这里有一个很明显的Calendar-API问题。它使用int
作为字段的类型,而不是专门的对象/字段类型,因此这些错误变得很常见。将它与Java 8中的新风格进行比较,即:
LocalDate date = ...;
date = date.with(ChronoField.YEAR, 2014);
请注意,在另一个更现代的库(内置于Java 8中)中,对象ChronoField.YEAR
不是int,因此这样的错误是不可能的。
答案 2 :(得分:1)
只需删除此行:
calendarStart.set(Calendar.YEAR,calendarStart.YEAR);// actually your setting the Year by 1
或者像这样添加年份:
calendarStart.set(Calendar.YEAR, 2014);
然后尝试这样的代码:
else if(scopeSelected != null && scopeSelected.equalsIgnoreCase("Year To Date")){
Calendar calendarStart = Calendar.getInstance();
calendarStart.set(Calendar.MONTH,0);
calendarStart.set(Calendar.DAY_OF_MONTH,1);
Date startDate=calendarStart.getTime();
DateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
paramStartDate = dateFormat1.format(startDate);
setParamStartDate(paramStartDate);
}