Java代码来计算日期范围中的夜晚(00:00:00)的数量

我正在尝试编写一个Java块来查找特定日期范围内的半夜数。

例如:

开始日期:05/01/2014 00:00:00结束日期:05/03/2014 00:00:00

这个范围有3个半夜。

要么

开始日期:05/01/2014 00:00:00结束日期:05/02/2014 23:59:59

这只有一个。

它基本上必须告诉我在日期范围内发生了多少次“00:00:00”。 请帮助我。 我尝试了很多方法,但没有一个正确。


使用乔达时间的答案是不正确的。 正如@khriskooper已经注意到了之间的中期计数

2014-05-01 00:00:00 and 2014-05-02 23:59:59

不是一个,而是两个夜间!

因此,这里使用Joda-Time(未测试)进行更正,但它也可以是支持日期范围计算的任何其他库(对于旧版Java-pre8不适用)。 我忽略了时区的细节,因为我不认为它与问题真正相关。 如果OP希望他可以用DateTime替换LocalDateTime并应用时区。

LocalDateTime ldt1 = new LocalDateTime(2014, 5, 1, 0, 0, 0);
LocalDateTime ldt2 = new LocalDateTime(2014, 5, 2, 23, 59, 59);

int days = Days.daysBetween(ldt1.toLocalDate(), ldt2.toLocalDate()).getDays();
if (ldt1.toLocalTime().equals(new LocalTime(0, 0))) {
  days++;
}

我只会计算日期(实际日期),如果最早日期的时间为00:00:00,则添加一个日期。

开始日期:05/01/2014 00:00:00结束日期:05/03/2014 00:00:00

  • 03 - 01 = 2天。
  • 由于开始日期的时间为00:00:00,因此请添加一个:
  • 2 + 1 = 3夜。
  • 要么

    开始日期:05/01/2014 00:00:00结束日期:05/02/2014 23:59:59

  • 02 - 01 = 1天。
  • 由于开始日期的时间为00:00:00,因此请添加一个:
  • 1 + 1 = 2夜。
  • 也,

    开始日期:5/01/2014 23:59:59结束日期:5/02/2014 00:00:01

  • 02 - 01 = 1天。
  • 由于开始日期的时间不是00:00:00,因此请勿添加一个:
  • 1午夜。

  • 一种选择是使用乔达时间库:

    DateTimeZone zone = DateTimeZone.forID("America/New_York");
    
    int days = Days.daysBetween(new DateTime(startDate, zone), new DateTime(endDate, zone)).getDays();
    

    我认为这是最简单的方法。 缺点是你需要多一个图书馆..

    希望这可以帮助!

    链接地址: http://www.djcxy.com/p/36673.html

    上一篇: Java code to calculate number of mid nights (00:00:00) in a date range

    下一篇: Joda time find difference between Hours