改变一年的第一周

629*_*629 6 java datetime calendar date

使用Java的日历或其他东西,假设我将日期设置为2012-10-26.我希望这个日期成为一年中的第一天.是否有可能得到特定日期的周数 - 假设它是2012-12-10-假设一年的第一周从2012-10-26开始?

我知道我的问题听起来有点奇怪,但我可以使用任何有用的输入.

谢谢.

- 细节

我有一个名为WeeklySchedule的数据库表.在这个表我已经开始从列Week1Week52,每列有关于那个星期的日子里的一些数据.不幸的是,第一周并不是真正的第一周.假设Week12012-08-26开始,我需要进行计算.

jah*_*roy 2

以下是使用日历 API 的一种方法:

private static final Calendar START_CAL = createAugust26th2012Cal();

public int getWeekNumber(Calendar someCal) {
    int theWeek = someCal.get(Calendar.WEEK_OF_YEAR);
    int weekCount = 0;
    while (theWeek != START_CAL.get(Calendar.WEEK_OF_YEAR)) {
        someCal.add(Calendar.WEEK_OF_YEAR, -1);
        theWeek = someCal.get(Calendar.WEEK_OF_YEAR);
        weekCount++;
    }
    return weekCount;
}
Run Code Online (Sandbox Code Playgroud)

或者您可以获取两个日历之间的差异(以毫秒为单位),并将结果除以一周内的毫秒数:

如果您使用此方法,请不要忘记考虑时区和夏令时。

我不太记得补偿 DST 的代码是什么样的,但我认为它是这样的:(我 不太记得是否将偏移量添加到两个操作数或从两个操作数中减去偏移量)

private static final long ONE_WEEK_MILLIS = 1000 * 60 * 60 * 24 * 7;

public int getWeeksBetween(Calendar calOne, Calendar calTwo) {
    long millisOne = calOne.getTime().getTime();
    long millisTwo = calTwo.getTime().getTime();
    long offsetOne = calOne.getTimeZone().getOffset(millisOne);
    long offsetTwo = calTwo.getTimeZone().getOffset(millisTwo);
    long diff = (millisTwo - offsetTwo) - (millisOne + offsetOne );
    return diff / ONE_WEEK_MILLIS;
}
Run Code Online (Sandbox Code Playgroud)