2016-11-26 8 views
0

)既存のスレッドは、メインメソッド(2016,25,11)に入力した日付(金曜日)が私のメソッドisWeekend ()。誰かが私はこのisWeekEndメソッドを使用したカレンダーインスタンスの不正な結果(

を理解するのに役立ちますしてください私は月曜日に週のカレンダーの最初の日を設定することについて話して、他のスレッドの人に見てきましたが、私はそれが私の結果

public static boolean isWeekend(Calendar userDate){ 
    if (userDate.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY || 
    userDate.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) 
     return true; 
    else return false; 
    } 

public static void main(String[] args) { 
    Calendar c1 = Calendar.getInstance(); 
    c1.set(2016, 25, 11); 
    System.out.println(CalendarBankHoliday.isWeekend(c1)); 
} 

を変更する方法を見ていません編集された:それは正しく平日と週末(真)として2016,26,11が表示されますが、2016、27、11(偽)

+0

私の質問に対する答えは、あなたが提供したものと同じではありません。 Imはカレンダーの静的な値を使ってブール値を求めています。その値は一週間に渡って反復されず、土曜日や日曜日にはスキップされますが、メソッドは全く異なります。 –

答えて

3

2つのこと:

  1. Calendarクラスは0ベースのMOで動作しますが1月= 0、2月= 1など
  2. setメソッドは、年、月、日ではなく年、月、日の順になります。

声明c1.set(2016, 25, 11);は、実際に2018年2月11日(日曜日)に日付を設定し、1 + 25 = 2×12ので、その年は2インクリメントされ、月は2月に設定されています。同様に、文c1.set(2016, 26, 11);は実際には2018年3月11日(日曜日)に日付を設定します。 、2016年11月25日にc1を設定する11〜10を変更、第2および第3引数を交換する

c1.set(2016, 10, 25); // Friday, November 25, 2016 

日付をハードコーディングしている場合は、静的定数を使用することができます明確にするため:

c1.set(2016, Calendar.NOVEMBER, 25); 
+0

とにかくこれを編集して1月が1になるようにしていますか? –

+2

これは、Calendarクラスの動作方法です。ユーザーから月を受け取っている場合は、1を引いてからsetメソッドに渡します。 –

+0

おかげで、その中に銀行の休日の日付が入ったカレンダーインスタンスが事前に作成されているだけです。その月も1ヶ月もかかりますか? –

2

私はレガシーCalendarDateクラスを使用しないことをお勧めします。 Java 8には、java.timeと呼ばれる新しいパッケージがあります。このパッケージには、日付を処理するためのより優れたクラスがあります。

あなたのケースでは、それはちょうど日付(時間なし)なので、java.time.LocalDateはあなたのユースケースに適しています。簡単な方法で週の曜日をチェックすることができます。また、1月= 1になるように数ヶ月も試行します。

関連する問題