Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 日历和日期格式的奇怪行为_Java_Date_Formatting - Fatal编程技术网

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世界。