日历滚动操作没有为我提供正确的输出

发布于 2024-09-15 09:49:03 字数 400 浏览 2 评论 0原文

我们正在使用日历。滚动 向上或向下移动日期。 javadoc 提到较大的字段不会被修改(即,如果我们从该月的第一天开始将日期向左移动 5,不幸的是,calendar.getTime() 无法获取上个月的值) 。月份值保持不变,我如何改变这种行为。我真的很想适当地移动日期值。 (例如,如果我在 2010 年 8 月 1 日向左移动 5 天 - 我希望看到 2010 年 6 月 27 日,而不是 2010 年 8 月 27 日)。我在这里缺少什么?

We are using Calendar.roll to either move the dates up or down. The javadoc mentions that the larger fields are not modified (i.e. if we move the date by 5 to the left starting on the first day of the month, unfortunately the calendar.getTime() doesn't get me a value from the previous month). The month value remains unchanged, how do I change this behavior. I really would like to move the date value as appropriate. (e.g. If I moved 5 days to the left on Aug 1st, 2010 - I would want to see Jun 27th, 2010 instead of Aug 27th, 2010). What am I missing here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

寒冷纷飞旳雪 2024-09-22 09:49:03

您可以将 Calendar.add 与负amount 一起使用。

You can use Calendar.add with a negative amount.

俏︾媚 2024-09-22 09:49:03

您将需要使用

roll 方法描述为:

字段添加签名金额,无需
改变更大的领域。负数
滚动量意味着减去
字段而不改变更大的字段。

示例:考虑一个 GregorianCalendar
原定为1999年8月31日。
调用 roll(Calendar.MONTH, 8) 设置
日历到 1999 年 4 月 30 日。使用
GregorianCalendar,DAY_OF_MONTH
四月中的字段不能为 31。
DAY_OF_MONTH 设置为最接近的
可能的值,30。YEAR 字段
保持 1999 年的价值,因为
是一个比 MONTH 更大的字段。

示例:考虑一个 GregorianCalendar
最初定为 1999 年 6 月 6 日星期日。
调用 roll(Calendar.WEEK_OF_MONTH,
-1)
将日历设置为 1999 年 6 月 1 日星期二,而调用
添加(Calendar.WEEK_OF_MONTH, -1)
日历到 1999 年 5 月 30 日星期日。
这是因为滚动规则强加了
附加约束:MONTH
不得在 WEEK_OF_MONTH 时更改
被卷起。与添加一起考虑
规则 1,结果日期必须是
6 月 1 日星期二至星期六之间
6月5日,根据添加规则2,
DAY_OF_WEEK,当
更改 WEEK_OF_MONTH 设置为
星期二,最接近的可能值
星期日(星期日是第一天
本周)。

You will need to use add(Calendar.DATE, -5) method from Calendar because of roll rule check.

roll method is described as :

Add to field a signed amount without
changing larger fields. A negative
roll amount means to subtract from
field without changing larger fields.

Example: Consider a GregorianCalendar
originally set to August 31, 1999.
Calling roll(Calendar.MONTH, 8) sets
the calendar to April 30, 1999. Using
a GregorianCalendar, the DAY_OF_MONTH
field cannot be 31 in the month April.
DAY_OF_MONTH is set to the closest
possible value, 30. The YEAR field
maintains the value of 1999 because it
is a larger field than MONTH.

Example: Consider a GregorianCalendar
originally set to Sunday June 6, 1999.
Calling roll(Calendar.WEEK_OF_MONTH,
-1)
sets the calendar to Tuesday June 1, 1999, whereas calling
add(Calendar.WEEK_OF_MONTH, -1) sets
the calendar to Sunday May 30, 1999.
This is because the roll rule imposes
an additional constraint: The MONTH
must not change when the WEEK_OF_MONTH
is rolled. Taken together with add
rule 1, the resultant date must be
between Tuesday June 1 and Saturday
June 5. According to add rule 2, the
DAY_OF_WEEK, an invariant when
changing the WEEK_OF_MONTH, is set to
Tuesday, the closest possible value to
Sunday (where Sunday is the first day
of the week).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文