Calendar.MONTH和内部工作

时间:2013-07-30 11:43:44

标签: java calendar

我对内部java工作和日历有一个小问题,我不明白为什么当我使用例如:

    Calendar c = Calendar.getInstance();
    mesInt = c.get(Calendar.MONTH); 
    System.out.println(mesInt);

如果那时我打印mesInt,如果实际月份是2月我获得mesInt = 1;

有什么特别的原因吗?我想知道,因为我之前在使用我的数据库时遇到了问题,我想如果有可能知道本月0开始的解决方案。

谢谢大家,如果问题重复,我很抱歉,我还没找到。

PD:我知道这是基于零的,但我想知道真正的原因。

PD2:为我糟糕的英语而烦恼。我知道解决方案我想知道原因。

5 个答案:

答案 0 :(得分:4)

文档说明第一个月是0.

  

我想知道真正的原因。

我怀疑从0开始更容易计算。我不确定任何一个人会承认设计日历。也许它在当时是有意义的,因为许多年份的编号,上午/下午等从0开始。本周BTW天从1开始。

  

知道我想知道解决方案是否可行。

使用

int mesInt = c.get(Calendar.MONTH) + 1; 
顺便说一句,对我来说,奇怪的是UNIDECIMBER当uni-deci意味着11而不是13。

答案 1 :(得分:0)

月份为0。我不确定原因......

因此,在月份中使用getset时,您需要记住要求的+1或-1。

Calendar c = Calendar.getInstance();
int mesInt = c.get(Calendar.MONTH) + 1;
c.set(Calendar.MONTH, mesInt - 1);

答案 2 :(得分:0)

Calendar中的月份从zero开始,这意味着January -> 0 February -> 1等。

答案 3 :(得分:0)

Calendar.MONTH规范如下:

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

基本上用于所有实际目的:1月为0,12月为11。

答案 4 :(得分:0)

我敢打赌,出于同样的原因,数组索引从0开始。它就是这样的。二月通常显示为“2”,但显示或打印值与在代码中使用它们不同。