2

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;
   }
} 

メソッドは入力としてグレゴリオ暦を取り、2つの日付はグレゴリオ暦形式であるため、問題が何であるかはよくわかりません。誰か知ってる?

4

2 に答える 2

2

あなたは;の終わりにありifます、それを削除してください...

グレゴリオ暦はカレンダーであり、その逆ではありません。抽象的および一般的な方法がニーズに適合している場合は、カレンダーを使用するように署名を変更します。可能であれば、「インターフェースにプログラムする」とはどういう意味ですか?で説明されているように、実装よりもコントラクトを使用する方が良いですか?(Luiggiに感謝します)。

holsidは適切なクラス名ではありません。ホルスの方がいいかもしれない...

このコードはうまく機能します:

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;
   }
}
于 2013-02-19T20:05:16.930 に答える
1

を呼び出すとisDateInCurrentWeek、渡す変数が入力されCalendarます。代わりにそれらを宣言しますGregorianCalendar

または、特定のものが必要ない場合は、を受け入れるGregorianCalendar場合はメソッドのシグネチャを変更します。isDateInCurrentWeekCalendar

于 2013-02-19T19:57:30.500 に答える