2010-03-07 5 views
6

Tôi đã viết vài dòng mã không hoạt động chính xác. Tại sao? Sb có thể giải thích cho tôi?Cách kiểm tra nếu hôm nay là chủ nhật với Lịch Java

Calendar date = Calendar.getInstance(); 

    date.set(2010, 03, 7); 

    if(date.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) 
     System.out.println("OK"); 
+1

Tôi ngạc nhiên khi không ai đề xuất sử dụng Thời gian Joda ... Đó là API tốt hơn nhiều để xử lý ngày/giờ. – SteveD

Trả lời

12

Để tránh mắc lỗi, bạn có thể sử dụng giá trị tĩnh của lịch cho tháng, ví dụ: :

date.set(2010, Calendar.MARCH, 7); 
5

April 7th, 2010 không phải là chủ nhật. Months start with zero: 0 = Tháng 1, 1 = Tháng 2, 2 = Tháng 3, ...

(Ngoài ra, lưu ý phụ, bạn đã sử dụng bát phân khi chỉ định tháng [03 thay vì 3]. , và rồi 08 là một số bát phân không hợp lệ)

9

tháng đếm từ con số không.

date.set(2010, 2, 7); 

Cũng không có thói quen của số viết với hàng đầu zero. Điều đó nói với Java (và nhiều ngôn ngữ khác) mà bạn muốn số được hiểu là một hằng số bát phân (cơ sở 8), không phải là số thập phân.

+1

Cảm ơn bạn vì lời bình luận vô nghĩa và bình luận! – Pointy

3

Có thể do tháng là 0-based, vì vậy bạn đặt ngày 4 tháng 4, thứ tư là thứ tư.

3

Giá trị tháng là 0. Java docs for set method of Calendar class. Ngoài ra nếu bạn muốn kiểm tra xem ngày hôm nay (ngày chương trình được chạy :)) là chủ nhật, bạn không cần phải đặt bất cứ điều gì, bởi vì phương pháp getInstance trả về một đối tượng Lịch dựa trên thời gian hiện tại trong múi giờ mặc định với ngôn ngữ mặc định:

Calendar date = Calendar.getInstance();  
//date.set(2010, 03, 7);  
if(date.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) 
    System.out.println("OK"); 
4

Đây có phải là Euler 19 không?

Nếu vậy, đây là một mẹo, vòng lặp 1901-2000, từ tháng 0-11, từ ngày 1-31, sau đó yêu cầu:

if(date.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY && day==1) 
    counter++; 
0

Đối với tôi mã này làm việc đúng cách, xin vui lòng thiết lập ngày chính xác bởi nó phần nghìn giây và cố gắng như thế này: -

GregorianCalendar dt = new GregorianCalendar(); 
    dt.setTimeInMillis(getTimestampDDmmYYYY(date).getTime()); 
    if((dt.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY| dt.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)) 
     return true; 

Cảm ơn, Prabhat Kumar Kashyap

0

cal.DAY_OF_WEEK == cal.SATURDAY || cal.DAY_OF_WEEK == cal.SATURDAY

phải đủ tốt.