只是为了提供更多背景:
两者都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 上,您可能会受到空间的限制,但如果您的应用程序执行大量日期/时间操作,它将为您省去很多麻烦。