使用Java中的日历获取不正确的日期

时间:2012-12-31 11:38:26

标签: java date time calendar

  

可能重复:
  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));

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

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

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

3 个答案:

答案 0 :(得分:0)

Month为零索引。所以,11意味着它的12月。

答案 1 :(得分:0)

您获得的输出是正确的。

我觉得你很困惑,为什么你把月份变为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

答案 2 :(得分:0)

你预计本月会有12而不是11。

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

来自javadoc

public static final int MONTH

获取和设置的字段编号,表示月份。这是特定于日历的值。格列高利历和朱利安历的一年中的第一个月是1月,即0;最后一个取决于一年中的月数。