Java中Calendar类中的before方法中的错误

1 java methods calendar class

我在java中使用Calendar类,发现"after"和"getTimeInMillis"方法中存在一个错误.这些方法适用于所有日历,但有些特殊日历有问题.我的测试代码是:

   Calendar c1 = Calendar.getInstance();
   Calendar c2 = Calendar.getInstance();
   c1.set(2006, 5, 31, 22, 0, 0);
   c2.set(2006, 6, 1, 1, 0, 0);
   if (c1.after(c2))
       System.out.println("c1 is after c2.");
   if (c1.getTimeInMillis()>c2.getTimeInMillis())
       System.out.println("c1 in mimisecond is greater than c2");
Run Code Online (Sandbox Code Playgroud)

虽然c1在c2之前,但我的代码打印:c1在c2之后.mimisecond中的c1大于c2

问题是什么?我该如何解决?我使用Java NetBeans 7.1 IDE和JDK 1.7.

Kep*_*pil 5

由于6月只有30天(5对应于6月,因为月份的编号从0开始),它们指向同一天.因此c1实际上是比较晚的日期c2.

为避免这种混淆,您可以使用Calendar类中的常量:

c1.set(2006, Calendar.MAY, 31, 22, 0, 0);
c2.set(2006, Calendar.JUNE, 1, 1, 0, 0);
Run Code Online (Sandbox Code Playgroud)