在GregorianCalendar类中有一个方法:
public void roll(int field,int amount)
这里记录:
http://docs.oracle.com/javase/7/docs/api/java/util/GregorianCalendar.html#roll%28int,%20int%29
有两种方法可以在具有设置日期的日历中添加和减去一段时间:add()和roll()。您根据这种情况使用或使用其他。当你使用roll()时,它给出了一个例子:
考虑最初设定为1999年6月6日星期日的GregorianCalendar。 调用roll(Calendar.WEEK_OF_MONTH,-1)将日历设置为星期二 1999年6月1日。
这是因为滚动规则强加了一个附加约束: 滚动WEEK_OF_MONTH时,MONTH不得更改。一起来 添加规则1,结果日期必须在6月1日星期二之间 6月5日星期六。
根据添加规则2,DAY_OF_WEEK,更改时不变 WEEK_OF_MONTH,设置为星期二,最接近的可能值 星期日(星期日是一周的第一天)。
我昨天自己试了这个:
Calendar cal = GregorianCalendar.getInstance();
cal.set(1999,5,6);
System.out.println(cal.getTime().toString());
这打印: Sun Jun 06 18:15:30 BST 1999
到目前为止一切顺利 现在尝试使用roll方法:
cal.roll(Calendar.WEEK_OF_MONTH, -1);
System.out.println(cal.getTime().toString());
这打印: 3月30日星期三18:15:30 BST 1999 它回滚时间为1周,但保持月份相同。
不正如文档建议的那样: 1999年6月1日星期二。
这是文档中的错误还是我做错了什么?
答案 0 :(得分:1)
我认为你正在退出"第一周"到了"第0周"然后在本月的最后一周翻转到""。
你的星期几周是从星期日开始的(正如文件所说的那样)?
如果他们在星期一开始,你可以得到不同的结果(因为你不再是在开始的那个月的第二周)。
尝试设置为"周日区域设置"。