2010-03-23 43 views
48

Tôi biết add() thêm khoảng thời gian được chỉ định (đã ký) vào trường thời gian đã cho, dựa trên các quy tắc của lịch.Lịch add() vs roll() khi nào chúng ta sử dụng?

roll() thêm đơn vị được chỉ định (đã ký) của thời gian vào trường thời gian đã cho mà không thay đổi trường lớn hơn.

Tôi không thể nghĩ ra việc sử dụng hàng ngày là roll() Tôi sẽ làm mọi thứ theo add().

Bạn có thể giúp tôi với các ví dụ khi chúng tôi sử dụng roll() và khi add()?

EDIT 1

Joda câu trả lời không được chấp nhận!

Trả lời

48
  • add() - gần như mọi khi, như bạn nói
  • roll() - ví dụ bạn muốn "tha cho" sự kiện trong vòng một tháng. Thuật toán có thể tiến hành một số ngày và đặt sự kiện, sau đó tiến hành thêm. Khi đến cuối tháng, nó sẽ bắt đầu lại từ đầu. Do đó roll().
24

Tìm thấy trong jGuru

  • Calendar.roll()
    Thay đổi một đơn vị cụ thể và lá 'lớn' (về thời gian tháng là 'lớn' hơn ngày) đơn vị không đổi. Ví dụ về API là được đưa ra ngày 31 tháng 8 năm 1999, được sắp xếp theo (Calendar.MONTH, 8) mang lại ngày 30 tháng 4 năm 1999. Nghĩa là, DAY là thay đổi để đáp ứng tối đa của tháng 4, nhưng 'đơn vị, YEAR, là không đổi.

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

  • Calendar.add()
    sẽ gây ra tiếp theo đơn vị 'lớn' để thay đổi, nếu cần thiết. Tức là, được đưa ra ngày ngày 31 tháng 8 năm 1999, thêm (Calendar.MONTH, 8) sản lượng ngày 30 tháng 4 năm 2000. add() cũng buộc tính toán lại mili giây và tất cả các trường.

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.

6

Tôi chỉ hỏi cùng một câu hỏi (mà là cách tôi tìm thấy trang này) và một người nào đó tại nơi làm việc của tôi (cũng được thực hiện, DCK) đã đưa ra một đề nghị:

Bộ chọn ngày trên nhiều điện thoại thông minh (và các giao diện tương tự khác) sẽ "cuộn" trong ngày từ ngày 31 đến ngày 1 mà không thay đổi tháng, tương tự cho trường tháng.

Tôi không thể nghĩ ra một máy ATM sử dụng khác và điều này có thể được triển khai theo các cách khác, nhưng ít nhất đó là một ví dụ!

Tim

2

Đây là ví dụ sẽ không hoạt động. Điều kiện trong vòng lặp sẽ không bao giờ hài lòng, vì cuộn, khi đạt đến ngày 31 tháng 1 năm 2014, sẽ quay lại ngày 1 tháng 1 năm 2014.

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); 
    } 
Các vấn đề liên quan