无法使用java(1-1-2100)从新年日期减去1天

时间:2014-04-14 15:57:31

标签: java

我只想在当前场景中从新年日期中减去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

5 个答案:

答案 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

或者,如果您正在使用,他们会引入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)