2012-08-09 32 views
11

Giả sử ngày hiện tại là ngày 28 tháng 5. Nếu tôi gọi các lệnh sau để đầu ra trở thànhThêm một ngày vào Lịch trong Android không thành công vào ngày 31 tháng

cal.add(Calendar.DATE, 1); // Day = 29 
cal.add(Calendar.DATE, 1); // Day = 30 
cal.add(Calendar.DATE, 1); // Day = 31 
cal.add(Calendar.DATE, 1); // Day = 31 
cal.add(Calendar.DATE, -1); // Day = 29 

Tại sao điều này không chuyển sang tháng tiếp theo. Và tại sao nó bị kẹt ở tuổi 31. (nhưng thực sự khi bạn trừ đi nó nhảy đến 29.

Trả lời

13

Khi bạn thêm 1 vào trường Calendar.DATE, nó sẽ tăng tháng cũng như khi kết thúc tháng đạt được (31 trong trường hợp cho tháng) để bạn đã viết không có ý nghĩa gỡ lỗi nó và chắc chắn giá trị ngày thực sự là những gì bạn nghĩ rằng đó là

0

tôi đã kiểm tra, nó bổ sung thêm thành công Nhìn mã và o/my p:..

Calendar cal = Calendar.getInstance(); // today is 09-Aug-2012 

for(int i=0;i<23;i++) { 
    cal.add(Calendar.DATE, 1); 
} 
System.out.println(cal.get(Calendar.DAY_OF_MONTH)); 

O/p

1

3

Dường như tôi sai rồi! theo api, cuộn chỉ cập nhật các lĩnh vực spezific!

nếu bạn thêm ngày để một Lịch thử

cal.roll(Calendar.DATE, 1); 

này sẽ tăng tháng, năm khi tràn

+1

cuộn chỉ "cuộn" lĩnh vực bạn đang thay đổi và không thay đổi các lĩnh vực lớn hơn – IncrediApp

+0

http://docs.oracle.com/ javase/1.4.2/docs/api/java/util/Calendar.html # roll (int, int) – IncrediApp

+1

@IncrediApp có vẻ như bạn đúng, lời giải thích trên cuộn đề xuất đến hướng khác ở vị trí đầu tiên _ "Tăng hoặc giảm các quy định trường và bọc giá trị của trường khi nó vượt quá giá trị lớn nhất hoặc tối thiểu cho ngày hiện tại. Các trường khác sẽ được điều chỉnh theo yêu cầu để duy trì một ngày nhất quán."_ – Kostronor

1

nào thực hiện Lịch mà bạn đang sử dụng? Bởi vì nó có vẻ làm việc cho mọi người khác ...

0

Nó không phải là một câu trả lời, chỉ là một đầu mối: tôi thấy nó xảy ra khi DST bắt đầu giữa các ngày. Có thể đó là trường hợp của bạn ...

Ví dụ: Brazillian DST bắt đầu trong năm nay tại "Sun 20 tháng 10 00:00:00 2013"

Calendar cal = Calendar.getInstance(); // today = Sat Oct 19 00:00:00 BRT 2013 
cal.add(Calendar.DATE, 1); // = Sat Oct 19 23:00:00 BRT 2013 

Thật không may, tôi vẫn không biết làm thế nào để workaround rằng .

21

Bạn có thể dễ dàng thực hiện việc này theo hai cách đơn giản là bạn của tôi. Đầu tiên là:

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.DAY_OF_MONTH, 1); 

và là một trong những thứ hai:

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.HOUR_OF_DAY, 24); 

Tôi nghĩ rằng bạn muốn tìm điều này. Cảm ơn.

0

Điều này cũng nên thực hiện thủ thuật.

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.DAY_OF_YEAR, 1); 

Bạn có thể kiểm tra nó làm việc với:

for (int i = 0; i < 365; i++) { 
    cal.add(Calendar.DAY_OF_YEAR, 1); 
    System.out.println(cal.getTime().toString()); 
} 
Các vấn đề liên quan