Tôi phần nào đấu tranh với điều này.Java: Làm thế nào để tôi có được ngày của x ngày trong một tháng (ví dụ: Thứ hai thứ ba trong tháng 2 năm 2012)
Tôi muốn thiết lập Lịch của mình để giả sử: Thứ hai thứ ba vào tháng 2 năm 2012. Và tôi không tìm thấy cách nào để thực hiện việc này bằng Java.
Ví dụ, nếu tôi muốn thiết lập lịch của tôi cho Giáng sinh năm 2011, tôi có thể làm điều này một cách dễ dàng, theo cách này:
Calendar when = Calendar.getInstance();
when.set (Calendar.MONTH, Calendar.DECEMBER);
when.set (Calendar.DAY_OF_MONTH, 25)
when.set (Calendar.YEAR, 2011);
Nhưng tôi đang bị mất như thế nào để thiết lập nó cho chúng ta hãy nói Memorial Day Năm 2012, là Thứ Hai cuối cùng của tháng Năm. Đây là mã của tôi, nhưng nó rõ ràng là sai, bởi vì tôi chỉ đơn giản là không thể giả định rằng ngày Thứ Hai cuối cùng của tháng sẽ được trong tuần 4 tháng 5 năm đó:
Calendar when = Calendar.getInstance();
when.set (Calendar.DAY_OF_WEEK,Calendar.MONDAY);
when.set (Calendar.MONTH, Calendar.MAY);
when.set (Calendar.WEEK_OF_MONTH, 4)
when.set (Calendar.YEAR, 2012);
Bất kỳ lời đề nghị như thế nào tôi programatically có thể tìm thấy ra, trong đó tuần của tháng 5 năm 2012 (ví dụ ở trên) là thứ hai cuối cùng? Giả sử tôi có thể nhận được thông tin đó, tôi sẽ có thể nhận được mã của tôi ở trên để làm việc.
Tôi cần thứ gì đó về cơ bản sẽ hoạt động cho bất kỳ ví dụ nào khác. Một cái gì đó mà có thể cho một ngày chính xác cho các kịch bản tương tự. Ví dụ:
Những ngày là:
- thứ Năm 03 tháng năm 2015
- 1st thứ hai của tháng 6 năm 2050
- 4 thứ ba của tháng 12 năm 2012
- 2 thứ tư của tháng bảy năm 2000
Tôi thực sự cần điều này cho dự án của tôi và tôi chắc chắn nó đơn giản, nhưng tôi đang phá vỡ đầu của tôi về điều này mà không có bất kỳ kết quả thực sự để hiển thị cho :) Và cũng không thể tìm thấy bất cứ điều gì trên mạng.
Added:
Ok, đây là nơi mà tôi đã có cho ngày Thứ Hai cuối cùng trong một tháng:
when.set (GregorianCalendar.MONTH, GregorianCalendar.MAY);
when.set (GregorianCalendar.DAY_OF_WEEK, Calendar.MONDAY);
when.set (GregorianCalendar.DAY_OF_WEEK_IN_MONTH, -1);
when.set (Calendar.YEAR, 2012);
Nhưng tôi không chắc chắn làm thế nào tôi sẽ đi về làm ví dụ giây thứ hai trong cùng tháng, như thế này?
when.set (GregorianCalendar.DAY_OF_WEEK_IN_MONTH, 2);
Mọi đề xuất?
Tôi thích mã này rất nhiều, nó thực sự hoạt động. Tôi chỉ không biết làm thế nào để xác định thứ tư cuối cùng (trong trường hợp này) trong tháng. Bạn có thể giúp. – jjj
Tôi đang thử một cái gì đó như: LocalDate d = getNDayOfMonth (DateTimeConstants.WEDNESDAY, -1, 10, 2011); Nhưng nó không hoạt động. – jjj
@jjj: Để có được ngày thứ tư cuối cùng của tháng đòi hỏi một sự thay đổi nhỏ, tôi đã thêm một phương pháp cho điều đó. Bạn cũng có thể sử dụng phương pháp đầu tiên: ví dụ, để có được thứ tư cuối cùng của tháng mười-2001, nhận được thứ tư đầu tiên của nov-2011 và trừ đi một tuần. – leonbloy