【问题标题】:Calendar add() vs roll() when do we use it?Calendar add() vs roll() 我们什么时候使用它?
【发布时间】:2016-04-07 20:09:37
【问题描述】:

我知道add() 根据日历的规则将指定(签名)的时间量添加到给定的时间字段。

并且roll() 在给定的时间字段上添加指定的(签名的)单个时间单位而不更改更大的字段。

我想不出roll() 的日常用法我会用add() 做所有事情。

你能帮我举个例子,我们什么时候使用roll(),什么时候使用add()

编辑 1

Joda 答案不被接受!

【问题讨论】:

    标签: java calendar


    【解决方案1】:
    • add() - 几乎总是如你所说
    • roll() - 例如你想在一个月内“分配”事件。该算法可能会进行几天并放置事件,然后继续进行。到了月底,应该从头开始。因此roll()

    【讨论】:

      【解决方案2】:

      发现于jGuru

      • Calendar.roll()
        更改特定单位 并留下“更大”(就时间-月而言 比天“大”)单位不变。 API示例是 给定日期为 1999 年 8 月 31 日, 滚动 (Calendar.MONTH, 8) 收益率 1999 年 4 月 30 日。也就是说,这一天是 更改为满足 4 月的最大值,但 “更大”的单位,YEAR,是 不变。

      roll(): Rolls up 8 months here i.e., adding 8 months to Aug will result in Apr but year remains unchanged(untouched).

      • 日历.add()
        会导致 下一个要更改的“更大”单位,如果 必要的。也就是说,给定一个日期 1999 年 8 月 31 日,添加(Calendar.MONTH, 8) 产生 2000 年 4 月 30 日。 add() 也 强制重新计算毫秒 和所有字段。

      add(): Adds months to the current date i.e., adding 8 months to Aug will give Apr of Next Year, hence forces the Year change.

      【讨论】:

        【解决方案3】:

        我只是问了同样的问题(这就是我找到此页面的方式),而我工作场所的某个人(干得好,DCK)提出了一个建议:

        许多智能手机(和其他类似界面)上的日期选择器会将日期从 31 日“滚动”到 1 日,而不会更改月份,月份字段也是如此。

        我想不出另一种使用 ATM,而这个可以用其他方式实现,但至少它是一个例子!

        提姆

        【讨论】:

          【解决方案4】:

          这是一个不起作用的示例。循环中的条件永远不会满足,因为滚动一旦到达 2014 年 1 月 31 日,就会回到 2014 年 1 月 1 日。

              Calendar start=new GregorianCalendar();
              start.set(Calendar.YEAR, 2014);
              start.set(Calendar.MONTH, 0);
              start.set(Calendar.DAY_OF_MONTH, 1);
              //January 2, 2014
          
              Calendar end=new GregorianCalendar();
              end.set(Calendar.YEAR, 2014);
              end.set(Calendar.MONTH, 1);
              end.set(Calendar.DAY_OF_MONTH, 2);
              //February 2, 2014
          
              while (start.getTime().before(end.getTime())){
                  start.roll(Calendar.DATE, 1);
              }
          

          【讨论】:

            猜你喜欢
            • 2010-12-27
            • 1970-01-01
            • 2018-09-09
            • 2011-04-10
            • 1970-01-01
            • 1970-01-01
            • 2011-03-11
            • 2019-06-28
            相关资源
            最近更新 更多