【问题标题】:How to calculate number of days between dates taking in account day saving shift?考虑到节假日班次,如何计算日期之间的天数?
【发布时间】:2012-02-06 18:38:11
【问题描述】:

我找到了如下建议:

Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
calendar1.set(2007, 01, 10);
calendar2.set(2007, 07, 01);
long milliseconds1 = calendar1.getTimeInMillis();
long milliseconds2 = calendar2.getTimeInMillis();
long diff = milliseconds2 - milliseconds1;
long diffSeconds = diff / 1000;
long diffMinutes = diff / (60 * 1000);
long diffHours = diff / (60 * 60 * 1000);
long diffDays = diff / (24 * 60 * 60 * 1000);

但是从冬季到夏季更改时间时会有 1 小时的差异。有没有一种通用的方法来计算这个?谢谢。

【问题讨论】:

  • 同样关注闰秒、闰年等

标签: java date calendar dst


【解决方案1】:

您应该考虑使用 joda-time 库,它提供了更有用的日期时间接口。例如,您的问题可以这样解决:Days.daysBetween(startInstant, endInstant).getDays()

至于使用标准日历——我想不出比使用 Calendar.get(Calendar.DAY_OF_YEAR) 更好的选择——这将使您能够在一个日历年内获得天数的差异。要将这种方法推广到几年,我建议只在开始和结束时刻之间的所有中间年份进行迭代,总结 Calendar.getActualMaximum(DAY_OF_YEAR)。不是很方便,但是……

【讨论】:

    【解决方案2】:

    您需要设置每个日历的时区。

    http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#getInstance%28java.util.TimeZone%29

    顺便说一句:Joda Time 可能是一个更好的解决方案。

    Java 不支持闰秒。因此,它将 UTC 视为与 GMT 相同。

    【讨论】:

      猜你喜欢
      • 2017-01-13
      • 2020-08-21
      • 2023-02-23
      • 1970-01-01
      • 1970-01-01
      • 2017-08-11
      • 1970-01-01
      • 2017-06-23
      • 1970-01-01
      相关资源
      最近更新 更多