【问题标题】:Java GregorianCalendar What am I doing wrong? Wrong date?Java GregorianCalendar 我做错了什么?日期错误?
【发布时间】:2010-05-31 13:08:48
【问题描述】:

您好,我对 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));
    }

}

【问题讨论】:

    标签: java date time gregorian-calendar


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        除了上述答案之外,由于 6 月没有第 31 天,日历会将其提升到下一个有效日期,因为默认情况下 Calendar.setLenient 为 true。

        【讨论】:

          猜你喜欢
          • 2013-11-25
          • 2014-06-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-01
          • 1970-01-01
          • 2013-06-28
          相关资源
          最近更新 更多