GregorianCalendar显示奇数值?

时间:2011-08-22 06:44:54

标签: java android calendar

确定。

calendar.get(Calendar.MONTH); 

返回当前月份的索引。因此,例如,如果现在要执行这行代码,它将在8月返回7。

然而

calendar.get(Calendar.AUGUST); 

以及

calendar.get(Calendar.MONTH); in april

返回3?

这使我很难根据我的开发环境获取正确的日期值。

有人可以告诉我为什么会这样吗?

3 个答案:

答案 0 :(得分:2)

您不应该使用calendar.get(CALENDAR.AUGUST) - 使用表示的常量,就好像它是表示字段类型的常量一样。遗憾的是,Calendar API的设计非常糟糕,以至于不能让这种情况发生,IMO,但你真的需要理解为什么它没有意义。

4月份的日期返回3,原因与8月份的日期返回7相同 - 这些月份在Calendar中基于0。我很高兴你很高兴8月回归7但是被4月回归3感到困惑......

无论如何,来自Calendar.MONTH的文档:

  

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

我强烈建议你研究一下Joda Time如果你在Java中做了一些甚至是微不足道的日期和时间 - 这是很多Date / Calendar更健全,更具表现力的API。

答案 1 :(得分:1)

Calendar.get()采用值为2的整数来请求Month或7来请求星期几。 MONTH和DAY_OF_WEEK是最终的提示,可让您更可读地指定这些值。

最终的int AUGUST也碰巧有一个值7,(与DAY_OF_WEEK相同)但不打算传递给get(),它只是一个有用的int,对应于8月份返回的值(Java Months)基于零。)

因此将AUGUST传递给get()没有意义。这种混淆是前期Java时代的遗留物。如果Calendar类被设计为使用枚举,那么它将更加清晰。

答案 2 :(得分:1)

这与Android完全无关。 java.util.Calendar肯定有一个糟糕的界面,但你也错了。 calendar.get(Calendar.MONTH)返回当前月份,其中1月= 0,calendar.get(Calendar.AUGUST)毫无意义。 AUGUST的const值恰好是7,与Calendar.DAY_OF_WEEK相同,因此您实际上获得了星期几(星期二)。简而言之,不要这样做。