Java 日历和日期格式的奇怪行为
我在构造日历对象,然后以特定样式格式化它时遇到了非常奇怪的行为 让代码说话:Java 日历和日期格式的奇怪行为,java,date,formatting,Java,Date,Formatting,我在构造日历对象,然后以特定样式格式化它时遇到了非常奇怪的行为 让代码说话: public class Test { public static void main(String[] args) { SimpleDateFormat frmt = new SimpleDateFormat(); frmt.applyPattern("yyyy-MM-dd"); GregorianCalendar date = new Gregor
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开始,所以
新的Gregorianalendar(2012,1,1)代码>是二月一日。对于1月1日,您将使用
new GregorianCalendar(2012,0,1);
// or even better
new GregorianCalendar(2012,Calendar.JANUARY,1);
月份从0开始,因此新的Gregorianalendar(2012,1,1)代码>是二月一日。对于1月1日,您将使用
new GregorianCalendar(2012,0,1);
// or even better
new GregorianCalendar(2012,Calendar.JANUARY,1);
月份以0为基础。一月=0。从Calendar\35; MONTH
javadoc:
表示月份的get和set字段号。这是特定于日历的值。一年中的第一个月是1月,即0;最后一个取决于一年中的月数
月份以0为基础。一月=0。从Calendar\35; MONTH
javadoc:
表示月份的get和set字段号。这是特定于日历的值。一年中的第一个月是1月,即0;最后一个取决于一年中的月数
月份在gregorianalendar
中以0开头
public static final int JANUARY = 0;
它是在Clanedar类中声明的。二月是1号。所以更新代码-
GregorianCalendar date = new GregorianCalendar(2012,Calendar.JANUARY,1);
或
月份在gregorianalendar
中以0开头
public static final int JANUARY = 0;
它是在Clanedar类中声明的。二月是1号。所以更新代码-
GregorianCalendar date = new GregorianCalendar(2012,Calendar.JANUARY,1);
或
如果您不想要索引为0的月份,请尝试。如果您不想要索引为0的月份,请尝试。它是:
月-用于在日历中设置月日历字段的值。月份值以0为基础。e、 g.一月份为0
建议在使用此构造函数时使用日历中的常量,例如[Calendar.JANUARY][2]
。它是:
月-用于在日历中设置月日历字段的值。月份值以0为基础。e、 g.一月份为0
建议在使用此构造函数时使用日历中的常量,例如[Calendar.JANUARY][2]
。月份是以零为基础的:一月=0,二月=1…感谢您的回答,但我真的不知道为什么月份是以零为基础的?@Nejc此处已回答了“为什么”:@assylias谢谢!但我真的觉得这是违反直觉的。你让这听起来像是一件大事。自1995年以来,java就是这样。想一想,就像以前很多人一样。违反直觉?不是在C世界。月份是零基的:一月=0,二月=1…谢谢你的回答,但我真的不知道为什么月份是零基的?@Nejc“为什么”已经在这里得到了回答:@assylias谢谢!但我真的觉得这是违反直觉的。你让这听起来像是一件大事。自1995年以来,java就是这样。想一想,就像以前很多人一样。违反直觉?不是在C世界。