30

例えば:

Calendar c = Calendar.getInstance();
DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
c.setTime( sdf.parse("31/12/2010"));
out.println( c.get( Calendar.WEEK_OF_YEAR ) );  

プリント1

ジョーダ時間でも同じことが起こります。

:)

4

5 に答える 5

61

週の定義はLocale異なります。

それが米国でどのように定義されているかは、他の投稿で議論されています。たとえば、ドイツ(DIN 1355-1 / ISO 8601)の場合:年の最初の週*は、新年の4日以上の最初の週です。

*週の最初の日は月曜日で、週の最後の日は日曜日です

そして、JavaCalendarはロケールに注意を払っています。例えば:

public static void main(String[] args) throws ParseException {

    DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    Date lastDec2010 = sdf.parse("31/12/2010");

    Calendar calUs = Calendar.getInstance(Locale.US);       
    calUs.setTime(lastDec2010);

    Calendar calDe = Calendar.getInstance(Locale.GERMAN);       
    calDe.setTime(lastDec2010);

    System.out.println( "us: " + calUs.get( Calendar.WEEK_OF_YEAR ) ); 
    System.out.println( "de: " + calDe.get( Calendar.WEEK_OF_YEAR ) );
}

プリント:

us: 1
de: 52

追加米国の場合(そしてメキシコでも同じだと思います)、1。Week of Yearは、1月1日が属する週です--つまり、1。Januarが土曜日の場合、前の金曜日(12月31日)は同じ週に属し、この場合、この日は2011年の1.週に属します。

于 2011-01-05T20:09:00.487 に答える
11

WEEK_OF_YEARフィールドに対して計算される値の範囲は1〜53です。1年の第1週は、その年から少なくともgetMinimalDaysInFirstWeek()日を含むgetFirstDayOfWeek()から始まる最も早い7日間です。したがって、getMinimalDaysInFirstWeek()、getFirstDayOfWeek()の値、および1月1日の曜日に依存します。ある年の第1週から翌年の第1週までの週には、2から52または53まで順番に番号が付けられます(必要)。

その週が2010年の最後の週なのか、2011年の最初の週なのかを判断するために、JavaはgetMinimalDaysInFirstWeek javadocを使用します。そのメソッドが7を返す場合、その週のすべての日が同じ年である最初の週は1週目であり、1を返す場合、翌年の任意の日の最初の週は翌年の最初の週です。

この場合、2011年1月の第1週は土曜日であるため、1日の週がすでに翌年の第1週と見なされるようにしたい場合は、2011年の第1週と見なされます。次に行います:

Calendar c = Calendar.getInstance();
c.setMinimalDaysInFirstWeek(7);//anything more than 1 will work in this year
DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
c.setTime( sdf.parse("31/12/2010"));
System.out.println( c.get( Calendar.WEEK_OF_YEAR ) ); 

戻り値:

52
于 2011-01-05T19:57:00.440 に答える
4
于 2016-01-18T22:07:10.920 に答える
3

IIRC、1月1日の日付の最初の週は第1週です。
そのため、第1週は2010年12月31日に返されます。
2011年12月31日に試してみると、52になります。

編集:週はロケール固有であり、日曜日から土曜日として定義されることもあれば、月曜日から日曜日として定義されることもあります。

于 2011-01-05T19:47:44.797 に答える
2

これは、週の始まりがローカルに依存しているためです。

米国では、第1週は1月1日より前の日曜日に始まります。2010年は12月26日です。そのため、12月31日はまだ第1週です。

ヨーロッパでは、第1週は1月1日より前の月曜日に始まります。2010年は12月27日です。そのため、ヨーロッパでも12月31日はまだ第1週です。

于 2011-01-05T19:49:43.180 に答える