2

Java の Calendar に問題があります。カレンダーに週を追加すると、正しく機能しない場合があります。例えば。week_of_yer を 3 に設定してから、-3 週間を追加します ;) ほとんどの場合はうまく機能しますが、2010 年、2016 年などでは機能しません (この年は 53 週の年です)。JDKのエラーのようです。週番号が52のときに年が変わると思います:D いくつかの簡単なコード:

Calendar calendar = new GregorianCalendar();
calendar.set(Calendar.YEAR, 2016);
calendar.set(Calendar.WEEK_OF_YEAR, 3);
calendar.add(Calendar.WEEK_OF_YEAR, -3);
System.out.println("rolled week: " + calendar.get(Calendar.WEEK_OF_YEAR) + " - " + calendar.get(Calendar.YEAR));

このコードの結果は次のとおりです:週をロールバック: 53 - 2016 :D

他のすべての場合は 53 - 2015 である必要があり、正常に機能します。

誰かが同様の問題を抱えていますか?

4

3 に答える 3

4

問題は、週年ではなくを表示していることです。これを示すために、カレンダーで算術を行う必要はありません。基本的に、2016 年 1 月 1 日を表示しています。そのは 2016 年ですが、週の年(つまり、年の週が計算される年) は 2015 です。

残念ながら、私が見る限り、Java には週の年を取得する方法がありません。Joda Timeを使用すると、これらすべてを簡単に行うことができます。

import org.joda.time.*;

public class Test {
    public static void main(String[] args) throws Exception {
        LocalDate date = new LocalDate(2016, 1, 1);
        System.out.println(date);
        System.out.println(date.getWeekOfWeekyear());
        System.out.println(date.getWeekyear());
    }    
}

出力:

2016-01-01
53
2015
于 2012-11-23T22:45:21.527 に答える
0

ジョン あなたは正しいです。今日、私は問題がどこにあるかに気づきました。それはまさにあなたが言ったことです。週番号と年だけに関心があるので、週に番号を追加する前に、曜日を月曜日に設定しました。私にとってはうまくいきます。

Calendar calendar = new GregorianCalendar();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.WEEK_OF_YEAR, week);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
calendar.add(Calendar.WEEK_OF_YEAR, -51);
于 2012-11-24T15:03:46.730 に答える