日付を 2013-01-01 00:00:00 に設定していますが、日付は Fri Feb 01 00:00:00 GMT+01:00 2013 になります。
なんで?
Calendar calendar = Calendar.getInstance();
calendar.set(2013, 1, 1, 0, 0, 0);
Date startDate = calendar.getTime();
Java の日付クラスでは、月の番号付けは 0 から始まります。Calendar
このよくある間違いを避けるために、クラスで月の定数を使用してください。
calendar.set(2013, Calendar.JANUARY, 1, 0, 0, 0);
1 は 2 月を意味します。0 は 1 月です。月は 0 から始まるインデックスが付けられます。常にニーモニックを使用することをお勧めします。Calendar.JANUARY
関連するちょっとした落とし穴...
私の年が間違っていたので、最初はこれは私が受けているのと同じ問題ではないと思いました。12 月に '12' を設定しましたが、月はオフセットで 0 から始まるため、Calendar は実際にはその 12 を繰り越して翌年の 1 月を意味するため、年が間違っている場合は、月も間違っていないか確認してください。私のように転がっている可能性があります。
つまり、setDate(2015, 12, 6) は、2016 年 1 月 6 日の日付になります。
そのため、暦月の定数を使用してください。