【问题标题】:getting incorrect date using Calender in Java [duplicate]在Java中使用日历获取不正确的日期[重复]
【发布时间】:2012-12-31 11:38:26
【问题描述】:

可能重复:
Calendar returns wrong month

我想检索我的应用程序的日期和时间,为此我编写了以下代码

Calendar c = Calendar.getInstance();
System.err.println("Date is: " + c.get(Calendar.DATE));
System.err.println("Month is: " + c.get(Calendar.MONTH));
System.err.println("Year is: " + c.get(Calendar.YEAR));
System.err.println("Hour is: " + c.get(Calendar.HOUR_OF_DAY));

但是前面的代码 sn-p 提供的结果不正确。

SEVERE: Date is: 31
SEVERE: Month is: 11
SEVERE: Year is: 2012
SEVERE: Hour is: 17 

注意:我机器上的时间是完美的,没有问题

【问题讨论】:

标签: java date time calendar


【解决方案1】:

您预计该月是 12 而不是 11。

c.get(Calendar.MONTH) 返回基于 0 的索引。

来自javadoc

public static final int MONTH

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

【讨论】:

    【解决方案2】:

    Month 是零索引。所以,11 表示它的 12 月。

    【讨论】:

      【解决方案3】:

      你得到的输出是正确的。

      我想你很困惑为什么你的月份是 11 而不是 12。对吧?如果那是问题,那就不要打扰。月份是基于 0 的,因此 0January1Feb 等等...

      所以输出为11 意味着December

      Read Docs

      如果您想要正确的月份,措辞为月份,请在下面使用。

      Calendar rightNow = Calendar.getInstance();
      java.text.SimpleDateFormat df1 = new java.text.SimpleDateFormat("MM");
      java.text.SimpleDateFormat df2 = new java.text.SimpleDateFormat("MMM");
      java.text.SimpleDateFormat df3 = new java.text.SimpleDateFormat("MMMM");
      System.out.println(df1.format(rightNow.getTime()));
      System.out.println(df2.format(rightNow.getTime()));
      System.out.println(df3.format(rightNow.getTime()));
      

      它会给你

      12
      Dec
      December
      

      Demo

      注意:在演示中,您将看到 2013 年 1 月,因为该站点的服务器位于 2013 年已经开始的地方。 World Time

      【讨论】:

        猜你喜欢
        • 2016-08-31
        • 2020-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多