在Java中使用日历获取错误的日期

在Java中使用日历获取错误的日期,java,date,time,calendar,Java,Date,Time,Calendar,可能重复: 我想检索我的应用程序的日期和时间,为此我编写了以下代码 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.e

可能重复:

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

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 

注意:我机器上的时间非常完美,没有问题
月份
为零索引。因此,
11
表示12月。

您得到的输出是正确的。

我想你很困惑为什么你的月数是11而不是12。对吗?如果这是个问题,那就不用麻烦了。月份以0为基础,因此
0
1月
1
2月
,依此类推

因此,输出为
11
意味着是
12月

如果您希望使用正确的月份,请使用下面的文字

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年已经开始的地方

这个月你的期望值是12而不是11

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

从:

公共静态最终整数月


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

你期望的是什么?哈哈,太棒了。乔达:时间很好,你得到的是绝对正确的。请参阅文档:提示:以后再做一些研究,这样可以防止人们对你的问题投反对票。您的问题的答案可以在Java文档中查找。@user1822826我认为否决票也是因为您没有解释输出的错误(即您认为月份部分错误)。否决票不会阻止你提问。