我只想在当前场景中从新年日期中减去1天。
但是当我减去时我得到了日期:31-0-2100
。
Calendar cal = Calendar.getInstance();
cal.set(2100, 1, 1);
cal.add(Calendar.DATE, -1);
String dateStr = ""+cal.get(Calendar.DATE)+
"-"+cal.get(Calendar.MONTH)+"-"+cal.get(Calendar.YEAR);
System.out.println(dateStr);
实际日期应为:31-12-2099
答案 0 :(得分:3)
当您执行cal.set(2100, 1, 1);
时,您设置的日期实际上是二月的第一天,而不是一月,因为几个月是0基数索引(0 -> January, ..., 11 -> December
)。
我建议您使用JodaTime这是一个更好的库来处理日期和时间。
DateTime date = new DateTime(2100, 1, 1, 0, 0, 0);
date = date.minusDays(1);
System.out.println(date.toString("dd-MM-yyyy")); //31-12-2099
或者,如果您正在使用java-8,他们会引入brand-new date and time API:
LocalDate date = LocalDate.of(2100, Month.JANUARY, 1);
date = date.minusDays(1);
System.out.println(date.format(DateTimeFormatter.ofPattern("dd-MM-yyyy"))); //31-12-2099
答案 1 :(得分:1)
在java中,0月是1月。
所以你得到的是正确的,因为你从2100年2月1日减去1天
答案 2 :(得分:1)
请注意,字段MONTH是0索引的,所以月份'1'实际上是2月份你得到的是:'31 -0'2100'是1月的最后一天。
来源:http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#MONTH
get和set的字段编号,表示月份。这是特定于日历的值。格列高利历和朱利安历的一年中的第一个月是1月,即0;最后一个取决于一年中的月数。
答案 3 :(得分:0)
使用日历功能实现。
经过测试和执行
Calendar cal = Calendar.getInstance();
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
cal.set(2099, 00, 01);
cal.add(Calendar.DATE, -1);
System.out.println(dateFormat.format(cal.getTime()));
另一种解决方案使用以下方法制定DateTime
date.getYear();
date.getDay();
date.getMonth();
尝试将这些参数传递给DateTime。
DateTime date = new DateTime(2100, 1, 1, 0, 0, 0);
date = date.minusDays(1);
System.out.println(date.toString("yyyy-MM-dd"));
答案 4 :(得分:-1)
请改用:
call.add(Calendar.DAY_OF_MONTH, -1)