2012-04-12 14 views
15

Tôi đang cố gắng tạo phương thức đang kiểm tra xem "hôm nay" có nằm trong khoảng từ Thứ Hai đến Thứ Sáu hay không. Đối với điều này tôi nhận được với dòng này 'int day = Calendar.DAY_OF_WEEK;' ngày thực tế. Sau đó tôi điền vào một ArrayList với những ngày (thứ hai, thứ ba, Wendsday, thứ năm và thứ sáu). Bây giờ khi tôi kiểm tra xem ngày thực tế có nằm trong ArrayList của tôi không, tôi đặt boolean DAY = true người khác tôi đặt boolean DAY = false. Tôi đã thử phương pháp ngày hôm nay và ngày hôm qua, nhưng nó allways đặt boolean để sai.Kiểm tra xem DAY_OF_WEEK có ở giữa Thứ Hai và Thứ Sáu

Tôi cần làm gì để thay đổi mã của mình hoạt động? Bạn sẽ tìm thấy mã ở đây.

   int day = Calendar.DAY_OF_WEEK; 
       ArrayList<Integer> daylist = new ArrayList<Integer>(); 
       daylist.add(Calendar.MONDAY); 
       daylist.add(Calendar.TUESDAY); 
       daylist.add(Calendar.WEDNESDAY); 
       daylist.add(Calendar.THURSDAY); 
       daylist.add(Calendar.FRIDAY); 

       if (daylist.contains(day)){ 
        DAY = true; 
       }else{ 
        DAY = false; 
       } 
+0

Tại sao bạn không thể kiểm tra xem ngày có nằm giữa Lịch.MONDAY (giá trị 2) và Lịch.FRIDAY (giá trị 6) không? –

+0

DAY_OF_WEEK, phải là một trong số 5 ngày – safari

+1

không, vì bạn phải Calendar.get (Calendar.DAY_OF_WEEK); – L7ColWinters

Trả lời

38

Wow, đó là giống như cố gắng để giết một con muỗi với một đầu đạn hạt nhân nhiệt :-)

Java guarantees (in 1.5) (không thay đổi lên đến 1.8 ít nhất) mà các giá trị của SUNDAY qua SATURDAY là tiếp giáp (từ 1 đến 7) vì vậy nó là một vấn đề đơn giản của việc kiểm tra một phạm vi.

Tuy nhiên, DAY_OF_WEEKkhông các ngày trong tuần, đó là một số lĩnh vực (với giá trị 7) được truyền cho getter để lấy các ngày trong tuần. Thời gian duy nhất Calendar.DAY_OF_WEEK chính nó sẽ khớp với một ngày thực tế sẽ là vào thứ Bảy.

Bạn có thể sử dụng mã như:

Calendar myDate = Calendar.getInstance(); // set this up however you need it. 
int dow = myDate.get (Calendar.DAY_OF_WEEK); 
boolean isWeekday = ((dow >= Calendar.MONDAY) && (dow <= Calendar.FRIDAY)); 

Sau này, isWeekday sẽ đúng nếu và chỉ nếu ngày từ myDate là Thứ Hai đến Thứ Sáu toàn diện.

+1

tại sao nó bắt đầu lúc 1? Nó sẽ bắt đầu ở 0. điều này làm cho nó khó xử hơn để làm các biểu thức như 'while ((hôm nay = ++ ngày hôm nay% 7)! = StartingPoint' – likejiujitsu

+3

@likejiujitsu: Tôi nghi ngờ nó bắt đầu từ một từ không ai khác hơn là uber-nerds sẽ sử dụng cụm từ "ngày kỷ niệm trong tuần". Hãy nghĩ về nó từ phía bên kia của hàng rào, tất cả chúng ta đều là những người lập trình C nghèo, phải liên tục thêm một 'tm_mon' khi xuất ra ngày :-) Thật dễ dàng trường hợp của bạn để làm 'while ((today = (today% 7) + 1)! = startsPoint)' nhưng, vâng, bạn phải suy nghĩ về nó một chút. – paxdiablo

5

int day = Calendar.DAY_OF_WEEK; thay vì nên

Calendar cal; // The calendar object 
....your other code for getting the date goes here.... 
int day = cal.get(Calendar.DAY_OF_WEEK); 

mã hiện tại của bạn chỉ nhận được giá trị của hằng số Calendar.DAY_OF_WEEK.

+0

Chính xác! Điều này quan trọng nếu bạn muốn làm cho nó hoạt động bình thường! – cyberPrivacy

2

Điều này sẽ thực hiện thủ thuật cho bạn.

int day = cal.get(Calendar.DAY_OF_WEEK); 
if (day >= Calendar.MONDAY && day <= Calendar.FRIDAY){ 
    DAY = true; 
}else{ 
    DAY = false; 
} 
1
int day = Calendar.DAY_OF_WEEK; 

Logic được chia ngay tại đây. DAY_OF_WEEK là hằng số xác định loại dữ liệu nào chúng tôi cần truy xuất từ ​​phiên bản Calendar.

Giải pháp đơn giản nhất để vấn đề của bạn (kể từ Calendar.FRIDAY> ...> Calendar.MONDAY) là

Calendar now = Calendar.getInstance(); 
int day = now.get(Calendar.DAY_OF_WEEK); 
if (day >= Calendar.MONDAY && day <= Calendar.FRIDAY) 
    // do something 
1

Đầu tiên Calendar.DAY_OF_WEEK là một trường số nguyên sẽ luôn mang đến cho bạn 7. Bạn cần phải tạo một thể hiện của một Lịch như Calendar cal = Calendar.getInstance(); Theo mặc định, nó cung cấp cho bạn ngày hiện tại trong múi giờ hiện tại. Sau đó, bạn có thể gọi cal.get (Calendar.DAY_OF_WEEK); mà sẽ cung cấp cho bạn bất kỳ ngày nào giữa chủ nhật và Sat'day

Bây giờ bạn có thể kiểm tra một cái gì đó như thế này

if(cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY || cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { 
     System.out.println("Weekend"); 
    } else { 
     System.out.println("Weekday"); 
    } 

Bạn có thể áp dụng logic này cho vấn đề của bạn !!