我尝试过以下示例。如果我通过上述日期,它应该返回第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));
}
}
答案 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
对象来完成任务。
希望它有所帮助。