【问题标题】:Java Calendar Object subtracts a monthJava 日历对象减去一个月
【发布时间】:2013-11-26 10:15:43
【问题描述】:

我正在尝试通过这样做来填充日历对象:

Date now = new Date(System.currentTimeMillis());
Calendar cal = Calendar.getInstance();
    cal.setTime(now);

现在是 2013-11-26 但是当我打印出来时

cal.get(Calendar.MONTH)

它将返回 10。

我该如何解决这个问题?

【问题讨论】:

  • 您为什么不阅读Calendar 类的文档? docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#MONTH
  • 如果您想向用户显示月份编号,或将其写入文件,您应该考虑使用SimpleDateFormatCalendar.get 返回的数字仅供内部使用,因此您可以将它们与Calendar.NOVEMBER 进行比较。

标签: java date calendar


【解决方案1】:

您无需修复它。这是Calendar 行为。

cal.get(Calendar.MONTH)

您使用的是当前月份的System.currentTimeMillis()

返回 10,因为月份从 0 开始。所以 10 是第 11 个月。即Nov

0-Jan
1-Feb
-
-

【讨论】:

    【解决方案2】:

    查看Calendar.MONTH的javadoc

    get 和 set 的字段编号,表示月份。这是特定于日历的值。公历和儒略历中的第一个月是 JANUARY,即 0

    【讨论】:

      【解决方案3】:

      使用为月份定义的Calendar 常量:

      if(cal.get(Calendar.MONTH) == Calendar.NOVEMBER)
        System.out.println("It's November.");
      

      Calendar 的月份字段从零开始,类似于数组索引。

      【讨论】:

        【解决方案4】:

        cal.get(Calendar.MONTH) + 1 - 编号从 0 开始

        【讨论】:

          【解决方案5】:

          你的打印正确

          cal.get(Calendar.MONTH)
          

          如果月份是JAN,它会打印0,所以对于NOV,10

          【讨论】:

            【解决方案6】:

            相比之下,Joda-Time 2.3 库提供了一个合理的月份编号。例如,December = 12

            System.out.println( "Today's month number: " + new org.joda.time.DateTime(2013, 12, 28, 19, 0, 0).getMonthOfYear() );
            

            运行时……

            Today's month number: 12
            

            【讨论】:

              猜你喜欢
              • 2011-01-12
              • 2011-06-04
              • 1970-01-01
              • 1970-01-01
              • 2020-07-26
              • 2016-08-31
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多