-2

可能重复:
日历返回错误的月份

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

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));

但是,前面的代码片段提供了不正确的结果。

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

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

4

3 回答 3

0

Month是零索引的。所以,11意味着它的十二月。

于 2012-12-31T11:41:09.313 回答
0

您得到的输出是正确的。

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

所以输出作为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

演示

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

于 2012-12-31T11:41:13.687 回答
0

您期望该月有 12 个而不是 11 个。

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

来自javadoc

public static final int MONTH

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

于 2012-12-31T11:44:02.183 回答