2012-05-03 38 views
6

Tôi cần lấy số của tất cả các ngày trong tuần (MON đến SUN) dựa vào ngày nào được gửi dưới dạng thông số.Nhận tất cả các ngày trong tuần hiện tại?

Ví dụ:
Tôi vượt qua ngày 2 tháng 5 và tôi nhận được một mảng [30,1,2,3,4,5,6] trong tuần này thực sự.
Hoặc, tôi vượt qua ngày 16 tháng 5 và tôi nhận được một mảng [14,15,16,17,18,19,20].

Tôi đã cố gắng sử dụng mã này, nhưng nó trở lại 7 ngày kể từ hôm nay, mà tôi không muốn.

 //get which week of month 
     Calendar now = Calendar.getInstance(); 
     now.set(mYear, mMonth, Integer.parseInt(extractedDay)); 
     int weekOfMonth = now.get(Calendar.WEEK_OF_MONTH); 

     //get all days of clicked week 
     SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy"); 
     Calendar calendar = Calendar.getInstance(); 
     calendar.setFirstDayOfWeek(Calendar.MONDAY); 
     calendar.set(mYear, mMonth, Integer.parseInt(extractedDay)); 

     String[] days = new String[7]; 
     for (int i = 0; i < 7; i++) 
     { 
      days[i] = format.format(calendar.getTime()); 
      calendar.add(Calendar.DAY_OF_MONTH, 1); 
     } 

Nhưng đây không phải là những gì tôi cần. Tôi cần phải vượt qua trong ngày hôm nay (THU) và để có được ngày của tuần này của tháng - Thứ hai, ngày 30 tháng tư tới Sun, tháng 6.

EDIT

Tôi nhận ra rằng tôi có một mã số trong đó phát hiện mà tuần của một tháng. Có cách nào để sử dụng dữ liệu này và đặt ngày cho Thứ Hai không? Ví dụ, tôi vượt qua ngày 16 tháng 5 và sau đó tôi phát hiện ra rằng đó là tuần thứ 3 của tháng 5 và tôi đã đặt biến số firstDayOfWeek (biến mới) thành Ngày 14 tháng 5

+0

Bạn có thể giảm mã mẫu xuống bản chất không? Chúng tôi không cần mã "tuần nào trong tháng" và nó lúng túng ngay từ cái nhìn đầu tiên. –

Trả lời

19

Bạn có đầu tiên để trừ các ngày trong tuần của ngày mà bạn chọn, để bắt đầu từ ngày đầu tiên của tuần. Hãy thử đoạn mã sau:

public static void main(String[] args){ 
    Calendar now = Calendar.getInstance(); 

    SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy"); 

    String[] days = new String[7]; 
    int delta = -now.get(GregorianCalendar.DAY_OF_WEEK) + 2; //add 2 if your week start on monday 
    now.add(Calendar.DAY_OF_MONTH, delta); 
    for (int i = 0; i < 7; i++) 
    { 
     days[i] = format.format(now.getTime()); 
     now.add(Calendar.DAY_OF_MONTH, 1); 
    } 
    System.out.println(Arrays.toString(days)); 

} 

Ngày nay, nó ra:

[2012/04/30, 2012/05/01, 2012/05/02, 05/03/2012, 05/04/2012, 05/05/2012, 05/06/2012]

+0

tính năng này không hoạt động. chỉ hoạt động cho Thu. Chỉ cần thử những ngày khác. – sandalone

+0

Tôi vừa mới thử các ngày khác trong tuần này. Nó xuất kết quả tương tự. Bạn đang cố ngày mấy –

+0

16 tháng 5. Tôi thử qua 'now.set (2012, 4, 16)' hoặc bất kỳ ngày nào khác ngoài Thu – sandalone

1

Bạn sẽ cần sử dụng dòng mã này ở đâu đó trong bạn mã hiện tại:

calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); 

phải ít nhất là trước vòng lặp.

+0

Tôi đã làm. Vẫn là kết quả tương tự. 7 ngày trước ngày đã qua. – sandalone

0

bạn cần phải thiết lập ngày sau bạn thiết lập ngày

calendar.set(mYear, mMonth, Integer.parseInt(extractedDay)); calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

4

Câu hỏi của bạn đã được trả lời, nhưng tôi muốn thêm một chút. mã của bạn là có vấn đề theo hai cách:

  1. Nó sử dụng các kiểu dữ liệu khác nhau cho ngày đầu tiên (mYearintexactDayString?).
  2. Nó kết hợp phân tích cú pháp, định dạng và tạo kết quả.

Điều đó khiến bạn khó kiểm tra mã!

Vì vậy, tôi đề xuất một cách tiếp cận khác nhau:

public class DaysOfCurrentWeek { 
    public static void main(String[] args) { 
     Date refDate = new Date(); 

     Date[] days = getDaysOfWeek(refDate, Calendar.getInstance().getFirstDayOfWeek()); 

     for (Date day : days) { 
      System.out.println(day); 
     } 
    } 

    private static Date[] getDaysOfWeek(Date refDate, int firstDayOfWeek) { 
     Calendar calendar = Calendar.getInstance(); 
     calendar.setTime(refDate); 
     calendar.set(Calendar.DAY_OF_WEEK, firstDayOfWeek); 
     Date[] daysOfWeek = new Date[7]; 
     for (int i = 0; i < 7; i++) { 
      daysOfWeek[i] = calendar.getTime(); 
      calendar.add(Calendar.DAY_OF_MONTH, 1); 
     } 
     return daysOfWeek; 
    } 
} 

Mã này hoạt động như thế này:

  1. Tạo một ngày tham khảo (trong ví dụ này chỉ bằng cách sử dụng new Date()).
  2. Gọi getDaysOfWeek() để thực hiện "công việc bẩn". Bằng cách vượt qua firstDayOfWeek, bạn được tự do chọn MONDAY hoặc SUNDAY làm đầu tuần. Trong ví dụ này, tôi chỉ sử dụng mặc định của lịch.
  3. Trả lại kết quả - chưa định dạng và dưới dạng Date. Bằng cách này, bạn có thể cho phép mã gọi quyết định phải làm gì - in nó hoặc thực hiện một số tính toán thêm.

Bây giờ bạn có thể chỉ cần kiểm tra phương thức getDaysOfWeek() mà không phải lo lắng về định dạng hoặc cách ngày tham chiếu đã được tạo.

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