1

我在 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");

虽然 c1 在 c2 之前,但我的代码打印:c1 在 c2 之后。以毫秒为单位的 c1 大于 c2

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

4

1 回答 1

5

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

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

c1.set(2006, Calendar.MAY, 31, 22, 0, 0);
c2.set(2006, Calendar.JUNE, 1, 1, 0, 0);
于 2013-04-14T17:20:23.187 回答