奇怪的Java日历行为

奇怪的Java日历行为,java,calendar,Java,Calendar,有人知道为什么这一年的产出是2077年而不是2011年吗 Integer yyyyMMdd = 20110830 Calendar day = Calendar.getInstance(TimeZone.DEFAULT); Integer dd = yyyyMMdd % 100; Integer yyyy = yyyyMMdd / 10000; day.set(yyyy, MM-1, dd); System.err.println(day.getTimeInMillis()); 在对代码

有人知道为什么这一年的产出是2077年而不是2011年吗

Integer yyyyMMdd = 20110830
Calendar day = Calendar.getInstance(TimeZone.DEFAULT);

Integer dd = yyyyMMdd % 100;
Integer yyyy = yyyyMMdd / 10000;

day.set(yyyy, MM-1, dd);

System.err.println(day.getTimeInMillis());

在对代码进行了修复,使其能够真正编译之后,我得到了预期的结果——因此,很可能这是您实际运行但未显示的代码中的一个bug。这是我的密码:

import java.util.*;

class Test {
    public static void main(String[] args) {
        int yyyyMMdd = 20110830;
        Calendar day = Calendar.getInstance(TimeZone.getDefault());

        int dd = yyyyMMdd % 100;
        int MM = (yyyyMMdd % 10000) / 100;
        int yyyy = yyyyMMdd / 10000;

        day.set(yyyy, MM-1, dd);

        System.err.println(day.getTime());
    }
}
在我的机器上的结果:

Tue Aug 30 07:18:33 BST 2011

MM来自哪里?另外,尝试添加:Calendar.setLenient(false);在第二行之后,再次运行它。为什么到处都使用
Integer
而不是
int
?它不会在这里引起问题,但它显然很奇怪。哦,
时区在哪里。默认值是从哪里来的?你在第一行也漏掉了一个分号。如果你要显示问题,请发布真实代码。非常感谢,WW。我的变量“MM”的值是错误的,似乎泄漏到了“year”中。非常感谢,Jon。你是对的。我的代码确实是垃圾