将年份设为负数时,获取星期的时候会经常变化,百思不得其解!!
Calendar calendar = Calendar.getInstance();
for (int i = 0; i < 4; i++) {
calendar.set(-300, 5, 1);
System.out.println("DayOfWeek:"+ calendar.get(Calendar.DAY_OF_WEEK));
}输出竟然是:
DayOfWeek:6
DayOfWeek:1
DayOfWeek:6
DayOfWeek:1年份设为正数就没有这种问题。。

解决方案 »

  1.   

    设为负数表示公元前啊,我想用Calendar类做个小日历。。
      

  2.   

    晕,肯定变的啊.
    public final void set(int year,
                          int month,
                          int date)设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。保留其他日历字段以前的值。如果不需要这样做,则先调用 clear()。
      

  3.   

    楼主没好好看帮助文档.字段操作可以使用三种方法更改日历字段:set()、add() 和 roll()。set(f, value) 将日历字段 f 更改为 value。此外,它设置了一个内部成员变量,以指示日历字段 f 已经被更改。尽管日历字段 f 是立即更改的,但是直到下次调用 get()、getTime()、getTimeInMillis()、add() 或 roll() 时才会重新计算日历的时间值(以毫秒为单位)。因此,多次调用 set() 不会触发多次不必要的计算。使用 set() 更改日历字段的结果是,其他日历字段也可能发生更改,这取决于日历字段、日历字段值和日历系统。此外,在重新计算日历字段之后,get(f) 没必要通过调用 set 方法返回 value 集合。具体细节是通过具体的日历类确定的。示例:假定 GregorianCalendar 最初被设置为 1999 年 8 月 31 日。调用 set(Calendar.MONTH, Calendar.SEPTEMBER) 将该日期设置为 1999 年 9 月 31 日。如果随后调用 getTime(),那么这是分析 1999 年 10 月 1 日的一个暂时内部表示。但是,在调用 getTime() 之前调用 set(Calendar.DAY_OF_MONTH, 30) 会将该日期设置为 1999 年 9 月 30 日,因为在调用 set() 之后没有发生重新计算。
      

  4.   

    感谢fengyun817,尽管还是不明白为什么年份设为负数会发生这种现象,设为正数就没问题,但先调用clear()就没这种奇怪现象了。。