27

我正在做一个与 Android 相关的学习项目。我正在尝试使用以下代码获取当前年份和月份,但它不适用于我。

GregorianCalendar gc = new GregorianCalendar();
gc.YEAR // returning 1       
gc.MONTH // returning 2

Calendar c = Calendar.getInstance();
c.YEAR // returning 1       
c.MONTH // returning 2

有人能帮我吗?难道我做错了什么?请原谅我,我是 Java 开发的新手。谢谢。

4

6 回答 6

71

只是为了提供更多背景:

两者都new GregorianCalendar()Calendar.getInstance()正确给出在当前日期和时间初始化的日历。

MONTH并且YEAR是类中的常量Calendar。您不应该通过”引用来使用它们,这使得它们看起来像是对象状态的一部分。这是类设计的一个不幸部分Calendar,要访问不同字段的值,您需要get使用指定为这些常量之一的字段编号进行调用,如其他答案所示:

Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);

请注意,月份编号是从 0 开始的,因此在撰写本文时(4 月),月份编号将为 3。

Java 语言设计的一个不幸部分是,您可以通过该类型的表达式引用静态成员(例如常量),而不仅仅是通过类型名称。

我的建议:

  • 如果您的 IDE 允许(就像 Eclipse 一样),请制作诸如c.YEAR给出编译时错误之类的表达式 - 如果您始终使用Calendar.YEAR.
  • 在可能的情况下,使用Joda Time - 一个更好的 Java 日期/时间库。诚然,在 Android 上,您可能会受到空间的限制,但如果您的应用程序执行大量日期/时间操作,它将为您省去很多麻烦。
于 2012-04-15T11:55:25.867 回答
22

注意 MONTHS 从 0 开始..所以如果您需要将其映射到实际问题只需添加 +1

int month=c.get(Calendar.MONTH)+1;
于 2013-12-08T08:34:47.573 回答
5
int year=c.get(Calendar.YEAR);
int month=c.get(Calendar.MONTH);

   System.out.println(year);
   System.out.println(month);
于 2012-04-15T11:36:10.387 回答
3
Calendar c= Calendar.getInstance()
int cyear = c.get(Calendar.YEAR);//calender year starts from 1900 so you must add 1900 to the value recevie.i.e., 1990+112 = 2012
int cmonth = c.get(Calendar.MONTH);//this is april so you will receive  3 instead of 4.
int cday = c.get(Calendar.DAY_OF_MONTH);

参考这个链接

于 2012-04-15T11:36:28.360 回答
3
于 2016-12-16T03:33:24.850 回答
1

如何获取当前年份和月份。

        Calendar calendar = Calendar.getInstance();             
        int month = calendar.get(Calendar.MONTH) + 1;
        int year = calendar.get(Calendar.YEAR);

加 1 以获得正确的月份非常重要,因为第一个月的值为 0:

        int month = calendar.get(Calendar.MONTH) + 1;

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

于 2016-12-15T19:18:53.063 回答