2013-02-19 93 views
2

我試圖創建一個程序,它將兩個日期作爲參數,並返回日期是否在當前周內,但我在isDateInCurrentWeek的調用中遇到問題。當我嘗試編譯程序時,收到錯誤消息,說公曆日曆方法

requestHoliday.java:16: isDateInCurrentWeek(java.util.GregorianCalendar) in requestHoliday cannot be applied to (java.util.Calendar) 
     if (isDateInCurrentWeek(startDate) && isDateInCurrentWeek(endDate)); 

import java.util.*; 
import java.text.*; 

public class hols { 
    public static void main(String[] args) { 
     DateFormat df = new SimpleDateFormat("dd MM yyyy"); 
     Date start = df.parse(args[0]); 
     Date end = df.parse(args[1]); 
     Calendar startDate = new GregorianCalendar(); 
     Calendar endDate = new GregorianCalendar(); 
     startDate.setTime(start); 
     endDate.setTime(end); 
     if(isDateInCurrentWeek(startDate) && isDateInCurrentWeek(endDate)); 
     System.out.println("Date is in current week!"); 
    } 

    public static boolean isDateInCurrentWeek(GregorianCalendar date) { 
     Calendar currentCalendar = GregorianCalendar.getInstance(); 
     int week = currentCalendar.get(Calendar.WEEK_OF_YEAR); 
     int year = currentCalendar.get(Calendar.YEAR); 
     Calendar targetCalendar = GregorianCalendar.getInstance(); 
     targetCalendar = date; 
     int targetWeek = targetCalendar.get(Calendar.WEEK_OF_YEAR); 
     int targetYear = targetCalendar.get(Calendar.YEAR); 
     return week == targetWeek && year == targetYear; 
    } 
} 

不太清楚是什麼問題,因爲該方法需要一個GregorianCalendar作爲輸入,兩個日期都在陽曆的格式。有人知道嗎?

+1

如果使用[喬達時間(http://joda-time.sourceforge.net/)API,你永遠不會需要從現在開始抓你的頭,我很確定。 – Lion 2013-02-19 20:01:19

回答

2

您在if年底有;,刪除它...

公曆日曆,而不是相反。 如果抽象和通用方法適合您的需要,請更改簽名以使用日曆。在可能的情況下,最好使用契約,而不是在What does it mean to "program to an interface"?中解釋的實現(感謝Luiggi)。

hols id不是good class name。 Hols可能會更好......

此代碼工作得很好:

import java.text.DateFormat; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.Date; 
import java.util.GregorianCalendar; 

public class Hols { 
    public static void main(String[] args) throws ParseException { 
     DateFormat df = new SimpleDateFormat("dd MM yyyy"); 
     Date start = df.parse(args[0]); 
     Date end = df.parse(args[1]); 
     Calendar startDate = new GregorianCalendar(); 
     Calendar endDate = new GregorianCalendar(); 
     startDate.setTime(start); 
     endDate.setTime(end); 
     if(isDateInCurrentWeek(startDate) && isDateInCurrentWeek(endDate)) 
     System.out.println("Date is in current week!"); 
     else 
     System.out.println("Date is NOT in current week!"); 
    } 

    public static boolean isDateInCurrentWeek(Calendar date) { 
     Calendar currentCalendar = Calendar.getInstance(); 
     int week = currentCalendar.get(Calendar.WEEK_OF_YEAR); 
     int year = currentCalendar.get(Calendar.YEAR); 
     Calendar targetCalendar = Calendar.getInstance(); 
     targetCalendar = date; 
     int targetWeek = targetCalendar.get(Calendar.WEEK_OF_YEAR); 
     int targetYear = targetCalendar.get(Calendar.YEAR); 
     return week == targetWeek && year == targetYear; 
    } 
} 
+0

你還應該告知OP面向接口的代碼 - 抽象類而不是實現:[編程接口的含義是什麼?](http://stackoverflow.com/q/383947/1065197) – 2013-02-19 20:11:19

1

當您撥打isDateInCurrentWeek時,您傳入的變量鍵入Calendar。改爲將其聲明爲GregorianCalendar

或者如果您不需要任何東西GregorianCalendar特定,請更改方法簽名,如果isDateInCurrentWeek接受Calendar

+0

是否這樣? 'GregorianCalendar startDate = new GregorianCalendar();' – user1899174 2013-02-19 19:58:35

+0

對不起,代碼閱讀錯誤。 – 2013-02-19 19:59:12

+0

@ user1899174他意味着將函數從'isDateInCurrentWeek(GregorianCalendar)'更改爲'isDateInCurrentWeek(Calendar)' – 2013-02-19 19:59:56