2016-04-06 15 views
1

Calendar.getActualMaximum(Calendar.WEEK_OF_YEAR)を使用して、特定の年の合計週数を取得しています。これは私が使用しています関数です。calendar.getActualMaximum(Calendar.WEEK_OF_YEAR)は、1月11日に52を返し、12月に53を返します。

public static void main(String[] args) { 

    for(int i=2012; i<=2016; i++) { 
     System.out.println("Year : " + i + ", Total Weeks : " + getNumWeeksForYear(i)); 
    } 

} 
public static int getNumWeeksForYear(int year) { 
    Calendar c = Calendar.getInstance();   
    c.set(year, 12, 31); //issue 
    c.setFirstDayOfWeek(Calendar.MONDAY); 
    return c.getActualMaximum(Calendar.WEEK_OF_YEAR); 
} 
 
Output with c.set(year, 12, 31): 
Year : 2012, Total Weeks : 52 
Year : 2013, Total Weeks : 52 
Year : 2014, Total Weeks : 52 
Year : 2015, Total Weeks : 52 
Year : 2016, Total Weeks : 53 
 
Output with c.set(year, 1, 31): 
Year : 2012, Total Weeks : 53 
Year : 2013, Total Weeks : 52 
Year : 2014, Total Weeks : 52 
Year : 2015, Total Weeks : 52 
Year : 2016, Total Weeks : 52 

私はカレンダーの月が、私が使用して試してみました12月に設定されている場合、年間の総週間が異なっているなぜそれを把握することができません1〜12ヵ月、1〜11ヵ月の週数は同じですが、12ヵ月間は変化します。実験から、私は閏年でしか起こらないと予測できます。

私は、次のリンク参照していた:Calendar.getActualMaximum(Calendar.WEEK_OF_YEAR) weirdness

をしかし、これは私のクエリに応答しません。

答えて

2

最初の月は

private static final int JANUARY = 0; 

で、先月は

private static final int DECEMBER = 11; 

ですこれは、月12は、次の年の最初の月であることを意味します。

+0

フンを正確な数週間を計算します。 Javaは例外をスローする必要があります。 – arcy

+0

@Peter:ありがとう。あなたは正しいです。しかし、私が11月(今月の2016年12月)を使用した場合は52週間、2016年は53週間です。総週数を取得する正しい方法は何ですか? –

1

ここで月インデックスは、このようにフォーム0を開始します。あなたは11

c.set(year, 14,31); 
よりおろし金を与える場合

Year : 2012, Total Weeks : 53 
Year : 2013, Total Weeks : 52 
Year : 2014, Total Weeks : 52 
Year : 2015, Total Weeks : 52 
Year : 2016, Total Weeks : 52 

public static int getNumWeeksForYear(int year) { 
     Calendar c = Calendar.getInstance();   
     c.set(year, 11,31); //issue 
     c.setFirstDayOfWeek(Calendar.MONDAY); 
     return c.getActualMaximum(Calendar.WEEK_OF_YEAR); 
    } 

出力:

JANUARY=0, FEBRUARY=1,.., DECEMBER=11 

だから11までそれが

例コード正しい値を返します。 0

出力:

Year : 2012, Total Weeks : 52 
Year : 2013, Total Weeks : 52 
Year : 2014, Total Weeks : 52 
Year : 2015, Total Weeks : 52 
Year : 2016, Total Weeks : 53 

年にsee this example

関連する問題