2010-08-23 26 views
5

Chúng tôi đang sử dụng Lịch. roll để di chuyển ngày lên hoặc xuống. Javadoc đề cập rằng các trường lớn hơn không được sửa đổi (tức là nếu chúng ta di chuyển ngày bằng 5 sang trái bắt đầu vào ngày đầu tiên của tháng, thật không may là calendar.getTime() không cho tôi một giá trị từ tháng trước) . Giá trị tháng vẫn không thay đổi, làm cách nào để thay đổi hành vi này. Tôi thực sự muốn di chuyển giá trị ngày thích hợp. (ví dụ: Nếu tôi chuyển 5 ngày sang trái vào ngày 1 tháng 8 năm 2010 - Tôi muốn xem ngày 27 tháng 6 năm 2010 thay vì ngày 27 tháng 8 năm 2010). Tôi đang thiếu gì ở đây?Hoạt động cuộn lịch không cung cấp cho tôi kết quả chính xác

Trả lời

10

Bạn có thể sử dụng Calendar.add với số âm amount.

7

Bạn cần sử dụng add(Calendar.DATE, -5) method from Calendar vì kiểm tra quy tắc cuộn.

roll phương pháp được mô tả như sau:

Thêm vào field một lượng ký kết mà không thay đổi lĩnh vực lớn hơn. Số tiền âm âm có nghĩa là trừ từ trường mà không thay đổi trường lớn hơn.

Ví dụ: Xem xét một GregorianCalendar ban đầu thiết lập đến tháng 31, 1999. Calling roll(Calendar.MONTH, 8) bộ lịch đến tháng 30, 1999. Sử dụng một GregorianCalendar, lĩnh vực DAY_OF_MONTH không thể 31 trong tháng tháng tư. DAY_OF_MONTH được đặt thành giá trị gần nhất , 30. Trường YEAR duy trì giá trị năm 1999 vì nó là trường lớn hơn MONTH.

Ví dụ: Xem xét một GregorianCalendar ban đầu thiết lập đến Chủ Nhật ngày 06 tháng 6, 1999. Calling roll(Calendar.WEEK_OF_MONTH, -1) bộ lịch để thứ Ba ngày 01 Tháng 6 năm 1999, trong khi kêu gọi add(Calendar.WEEK_OF_MONTH, -1) bộ lịch đến chủ nhật 30 tháng 5, năm 1999. Đây là vì quy tắc cuộn áp đặt một hạn chế bổ sung: MONTH không được thay đổi khi WEEK_OF_MONTH được cuộn. Gộp chung với add quy tắc 1, ngày kết quả phải giữa Thứ Ba 01 Tháng Sáu và thứ Bảy Tháng sáu 5. Theo thêm quy tắc 2, DAY_OF_WEEK, một bất biến khi thay đổi WEEK_OF_MONTH, được thiết lập để Thứ ba, gần nhất giá trị có thể là Chủ nhật (trong đó Chủ Nhật là ngày đầu tiên trong tuần).

Các vấn đề liên quan