Java:计算两个LocalDateTime对象之间的夜数

Java:计算两个LocalDateTime对象之间的夜数,java,datetime,Java,Datetime,我试图编写一个函数来计算Java中两个LocalDateTime对象之间的夜数 这就是我到目前为止所想到的(使用java.time.LocalDateTime): 这似乎可以解决问题,但我知道DateTime可能会导致与时区、夏令时等相关的各种问题 有人能提出一个更好的函数吗?你可以完全忽略时间部分,使用ChronoUnit.DAYS.between: int nights = ChronoUnit.DAYS.between(start.toLocalDate(), end.toLocalDat

我试图编写一个函数来计算Java中两个LocalDateTime对象之间的夜数

这就是我到目前为止所想到的(使用
java.time.LocalDateTime
):

这似乎可以解决问题,但我知道DateTime可能会导致与时区、夏令时等相关的各种问题


有人能提出一个更好的函数吗?

你可以完全忽略时间部分,使用
ChronoUnit.DAYS.between

int nights = ChronoUnit.DAYS.between(start.toLocalDate(), end.toLocalDate());

这是因为通过
toLocalDate
,您只考虑本地日期时间的日期部分。

您可以完全忽略时间部分,并使用
ChronoUnit.DAYS.between

int nights = ChronoUnit.DAYS.between(start.toLocalDate(), end.toLocalDate());

这是因为通过
toLocalDate
,您只考虑了本地日期时间的日期部分。

非常感谢!这似乎很有效。我理解句点和持续时间之间的区别,但我想知道为什么持续时间.between(start,end).toDays();行为与代码不同。这就好像使用.toDays()隐藏期间时,期间会将天数取整,而持续时间则会取整。你知道这是怎么回事吗?@Ben123这对我来说意味着你还不明白
Period
Duration
之间的区别<代码>期间适用于日期组件,而
持续时间
适用于时间组件<代码>今天只计算持续时间内有多少24小时<另一方面,code>Period只查看日期(注意它如何接受
LocalDate
而不是
TemporalAccessor
Duration
那样),并计算年、月和日的差异。非常感谢!这似乎很有效。我理解句点和持续时间之间的区别,但我想知道为什么持续时间.between(start,end).toDays();行为与代码不同。这就好像使用.toDays()隐藏期间时,期间会将天数取整,而持续时间则会取整。你知道这是怎么回事吗?@Ben123这对我来说意味着你还不明白
Period
Duration
之间的区别<代码>期间适用于日期组件,而
持续时间
适用于时间组件<代码>今天只计算持续时间内有多少24小时<另一方面,code>Period只查看日期(注意它如何接受
LocalDate
而不是
TemporalAccessor
Duration
那样),并计算年、月和日的差异。如何定义夜晚?如果开始和结束时间都在白天,我认为预期的答案是明确的。但是如果其中一个在夜间呢?
LocalDateTime
在这里使用的类是错误的
ZoneDateTime
是您所需要的。您如何定义夜晚?如果开始和结束时间都在白天,我认为预期的答案是明确的。但是如果其中一个在夜间呢?
LocalDateTime
在这里使用的类是错误的
ZoneDateTime
是您所需要的。