6

您好,我对 GregorianCalendar 有疑问。

里面有什么问题?

2010/6/1 而不是 2010/05/31 的结果如何?

package test;

import java.util.Calendar;
import java.util.GregorianCalendar;

public class Main {

    public static void main(String[] args) {
        Calendar cal = new GregorianCalendar(2010, 5, 31);
        System.out.println(cal.get(Calendar.YEAR) + "/" + cal.get(Calendar.MONTH) + "/" + cal.get(Calendar.DAY_OF_MONTH));
    }

}
4

3 回答 3

12

Java 从 0 开始计算月份,所以 5 是六月。使用常量总是更安全。所以我会写:

Calendar cal = new GregorianCalendar(2010, Calendar.MAY, 31);

这同样适用于您的日历打印。如果你这样做cal.get(Calendar.MONTH),你会得到 6 的含义 7 月。

于 2010-05-31T13:11:15.883 回答
1

这是因为月份编号是从零开始的,因此您尝试设置 6 月 31 日,但 6 月只有 30 天,因此它被转换为 7 月 1 日。

于 2010-05-31T13:12:23.383 回答
1

添加到上述答案中,由于 6 月没有第 31 天,因此 Calendar 将其提升到下一个有效日期,因为Calendar.setLenient默认为 true。

于 2011-11-27T00:48:50.113 回答