构建Calendar对象然后以特定样式格式化时,我遇到了非常奇怪的行为。
让代码进行讨论:
public class Test
{
public static void main(String[] args)
{
SimpleDateFormat frmt = new SimpleDateFormat();
frmt.applyPattern("yyyy-MM-dd");
GregorianCalendar date = new GregorianCalendar(2012,1,1);
System.out.println(frmt.format(date.getTime()));
}
}
输出结果为:
2012-02-01
预期的产出当然是:
2012-01-01
我做错了什么?
答案 0 :(得分:3)
月份从0开始,因此new GregorianCalendar(2012,1,1);
是2月1日。对于1月1日,您将使用
new GregorianCalendar(2012,0,1);
// or even better
new GregorianCalendar(2012,Calendar.JANUARY,1);
答案 1 :(得分:2)
月份以GregorianCalendar
中的0开头。
public static final int JANUARY = 0;
它在Calendar类中声明。对于二月它是1.所以更新代码 -
GregorianCalendar date = new GregorianCalendar(2012,Calendar.JANUARY,1);
或
GregorianCalendar date = new GregorianCalendar(2012,0,1);
答案 2 :(得分:1)
月份基于0。 1月== 0.来自Calendar#MONTH
javadoc:
get和set的字段编号,表示月份。这是特定于日历的值。一年中的第一个月是1月,即0;最后一个取决于一年中的月数。
答案 3 :(得分:0)
如果您不希望索引为0的月份
,请尝试Joda time答案 4 :(得分:0)
month - 用于在日历中设置MONTH日历字段的值。月值基于0。例如,1月份为0。
建议在使用此构造函数时使用Calendar中的常量,例如[Calendar.JANUARY][2]
。