使用Java的Calendar或其他工具,假设我将日期设置为2012-10-26。我希望这个日期是一年的第一天。是否可以获取特定日期的星期数-假设一年的第一周从2012-10-26开始,假设它是2012-12-10-?

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

谢谢。

-详细信息

我有一个名为WeeklySchedule的数据库表。在此表中,我具有从Week1到Week52的列,并且每一列都包含有关该星期几的数据。不幸的是,Week1并不是一年中的第一周。假设Week1从2012-08-26开始,我需要进行计算。

最佳答案

这是使用Calendar 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;
}

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

如果使用这种方法,请不要忘记考虑“时区”和“夏时制”。

我不记得确切的代码是如何补偿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;
}

关于java - 更改一年的第一周,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13080854/

10-10 08:46