gpt4 book ai didi

java - 计算 java 日期差异时出错

转载 作者:行者123 更新时间:2023-12-01 17:30:11 25 4
gpt4 key购买 nike

计算两个日期(java.util.Date)之间的差异(以否为单位)。日子看起来很简单,我们可以找到不同的方法来做到这一点。我使用以下代码来计算日期差异:

  public static long daysBetween(Calendar startDate, Calendar endDate) {
Calendar date = (Calendar) startDate.clone();
long daysBetween = 0;
while (date.before(endDate)) {
date.add(Calendar.DAY_OF_MONTH, 1);
daysBetween++;
}
return daysBetween;
}

main()中,我使用了以下两个日期:

    Calendar c1 = Calendar.getInstance();
c1.set(2011, 1, 1);
Calendar c2 = Calendar.getInstance();
c2.set(2011, 1, 31);

long difference = daysBetween(c1, c2); //

但是变量difference的值并不一致。有时是 30,有时是 31。那么,为什么会发生这种情况呢?

有什么解决方案可以使用该方法得到一致的输出吗?

最佳答案

您正在设置日历的日期部分,而不是时间部分。

有时时钟会在对 getInstance() 的调用之间滴答作响,有时则不会,因此会出现不一致。

选项:

  • 设置时间和日期,例如到午夜
  • 使用更好的日期/时间库 - Joda Time - 具有更合适的表示形式(LocalDate)。这里的一个重要寓意是,如果您能找到一种代表您所拥有的确切信息的类型,而不是其他任何信息,那么它可能很合适并且会减少并发症。

使用 LocalDate,您甚至不必执行循环,因为 Joda Time 无论如何都可以很好地支持计算两个值之间的差异。

LocalDate date1 = new LocalDate(2011, 1, 1);
LocalDate date2 = new LocalDate(2011, 1, 31);
Days period = Days.daysBetween(days1, days2);
int days = period.getDays();

关于java - 计算 java 日期差异时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11828850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com