我想要一个函数,它在给定一周和一年的情况下返回下一周和一年。它看起来像:
public static int[] getNextWeek(int year, int week) {
Calendar c = Calendar.getInstance(); // I'm Locale.US and TimeZone "America/New_York"
c.clear();
c.set(Calendar.YEAR, year);
c.set(Calendar.WEEK_OF_YEAR, week);
c.add(Calendar.WEEK_OF_YEAR, 1);
return new int[] {c.get(Calendar.YEAR), c.get(Calendar.WEEK_OF_YEAR)}
}
这有时不适用于年份边界。这似乎取决于您调用它的日期以及您使用的参数!例如,如果我在 2012 年和第 52 周调用它,那么我希望结果是 2013 年和第 1 周。如果你今天调用它(2012 年 7 月 17 日星期二)它会起作用。如果您将星期几设置为昨天,则不会;并且在 2012 年第 1 周出现奇怪的结果。奇怪。到底是怎么回事?它似乎与星期几有关,因为如果用 SUNDAY 或 MONDAY(2012 年的最后两天)调用它就不起作用!如果我将星期几设置为一周的最后一天,该功能似乎可以工作;在调用 Calendar.add() 之前,我会:
// Must set to last day of week; initially set to first day due to API
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // SUNDAY
c.add(Calendar.DAY_OF_WEEK, 6); // Must roll forward not backwards
如果我创建一个 getPreviousWeek 方法,似乎没有任何奇怪之处。这是 java.util.Calendar 错误吗?下次我想我会使用 Joda 时间!