2013-05-30 50 views
8

Theo các tiểu bang tiêu đề, tạo ra một java.util.GregorianCalendar đối tượng, chúng ta hãy nói lịch, và chạyLịch của Java.DAY_OF_WEEK_IN_MONTH giá trị tối đa là 6. Đây có phải là chính xác không?

calendar.getMaximum(Calendar.DAY_OF_WEEK_IN_MONTH) 

nó trả 6! Theo hiểu biết tốt nhất của tôi, đây là 5, kể từ calendar.getMaximum(Calendar.DAY_OF_MONTH) bằng 31 và 31/7 == 4 với phần còn lại, nghĩa là tối đa 5 tuần và do đó một ngày có thể xảy ra tối đa 5 lần trong một tháng.

Tôi có thiếu gì đó ở đây không?

Trả lời

2

Các javadoc trạng thái:

Ví dụ, nếu một tháng có 31 ngày, DAY_OF_WEEK_IN_MONTH -1 sẽ chồng chéo lên nhau DAY_OF_WEEK_IN_MONTH 5 và kết thúc 4.

này thừa nhận, rằng giá trị tối đa có thể là 5. Để có lý do cho giá trị 6, sẽ phải có một tháng có 36 ngày, điều này sẽ không xảy ra ngay cả với các điều chỉnh ngày/giờ. Ít nhất tôi đã không tìm thấy bất cứ điều gì giống như kiểm tra thông tin về lịch Gregorian.

Vì vậy, có, giá trị lớn nhất nên 5.


Edit: Tôi cũng đã kiểm tra nguồn gốc của việc thực hiện tham khảo và không có lý do cho giá trị 6.

+0

Bạn có nghĩa là không có dấu hiệu cho thấy giá trị 6 sẽ cho biết tuần sau DAY_OF_WEEK_IN_MONTH 5? (theo ý nghĩa của javadocs * DAY_OF_WEEK_IN_MONTH 0 cho biết tuần trước DAY_OF_WEEK_IN_MONTH 1 *, theo ý kiến ​​của tôi, không được viết tốt lắm) – user2435660

+0

@ user2435660 Tôi có nghĩa là không có dấu hiệu nào cho thấy trường này sẽ được gán giá trị lớn hơn 5. Ngoài ra, nếu bạn gọi 'add (DAY_OF_WEEK_IN_MONTH, amount) ', ví dụ, nó không quan trọng giá trị tối đa là gì - nó chỉ cộng/trừ' số tiền * 7' ngày. – Mifeet

1

Bạn nói đúng, điều đó không có ý nghĩa. Đối với DAY_OF_WEEK_IN_MONTH6, sẽ có một tháng với 6 Thứ Hai trong đó (ví dụ).

0

Các lý do tại sao 6 không 5 của nó là bởi vì trong lịch tiếng Anh, ngày bắt đầu trong một tuần là chủ nhật. Ví dụ: nếu ngày đầu tiên của tháng, giả sử ngày 1 tháng 7 là Chủ Nhật, thì ngày 2 tháng 7 đã là tuần tiếp theo. Kể từ tháng Bảy có 31 ngày, bạn kết thúc với 6 tuần.

+0

Tôi không thực sự quan trọng ngày nào được coi là ngày đầu tiên trong tuần. Đối với một Ngày cụ thể, * DAY_OF_WEEK_IN_MONTH * hiển thị nếu đây là lần xuất hiện 1, 2, 3, ctra của ngày trong tuần tương ứng, trong tháng hiện tại. Vì vậy, số lượng tối đa phải là số lần xuất hiện tối đa có thể có của * cùng * ngày trong tuần trong một tháng. Nếu bạn kiểm tra lịch của hệ điều hành, bạn sẽ xác minh rằng ngay cả khi một tháng * có thể * kéo dài 6 tuần, bạn không thể tìm thấy * cùng * ngày trong tuần tham gia tất cả những điều này, 6, tuần – user2435660

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