错误的给定日期的周数

时间:2016-06-13 06:50:07

标签: java time

我尝试过以下示例。如果我通过上述日期,它应该返回第3周,但它将返回第2周。我的代码有什么问题?请帮助我。

public class weekNumberCount {
    public static void main(String[] args) 
    {
        Timestamp  startTime = new Timestamp(2016, 05, 17, 00, 00, 00, 00);
        Timestamp  endTime = new Timestamp(2016,06, 06, 23, 59, 59, 00); 
        Timestamp  givenDateString = new Timestamp(2016, 06, 01, 00, 00, 00, 00);

        if (givenDateString.compareTo(startTime) < 0 || givenDateString.compareTo(endTime) > 0) {
            System.out.println("Not a Valid Date"); 
        }

        System.out.println((int)(((givenDateString.getTime() - startTime.getTime() - 1)/(1000L * 3600 * 24 * 7)) + 1));  
    }
}

1 个答案:

答案 0 :(得分:0)

您的代码问题是您从两个日期的差异中减去额外的1。你应该做的是采取这两个日期的差异,这两个日期将持续2周,然后加上1,标志着第三周的开始

因此你应该只需要

((givenDateString.getTime() - startTime.getTime())/(1000L * 3600 * 24 * 7))+1

<强>更新

理解也存在问题。在Java中,所有月份都基于0,所以它的工作方式如下:

  

1月 - 0

     

2月1日

     

     

     

12月 - 11日

因此,在您的代码中相应地传递数月,并通过ceil这样的差异来计算周数。

System.out.println(Math.ceil((givenDateString.getTime() - startTime
                    .getTime()) / (1000d * 3600 * 24 * 7)));

还有一件事是你使用Timestamp类的弃用构造函数而不是使用Calendar对象来完成任务。

希望它有所帮助。