Java8:计算两个ZoneDateTime之间的差异
我正试图写一个方法来打印两个ZoneDateTimes之间的时差,关于时区之间的差异 我找到了一些解决方案,但所有这些解决方案都是为使用LocalDateTime而编写的,您可以在中使用方法。Java8:计算两个ZoneDateTime之间的差异,java,date,datetime,java-8,timezone,Java,Date,Datetime,Java 8,Timezone,我正试图写一个方法来打印两个ZoneDateTimes之间的时差,关于时区之间的差异 我找到了一些解决方案,但所有这些解决方案都是为使用LocalDateTime而编写的,您可以在中使用方法。 此方法将这些时间转换为相同的区域(从第一个参数开始的区域),然后调用直到在Temporal接口中声明的方法: static long zonedDateTimeDifference(ZonedDateTime d1, ZonedDateTime d2, ChronoUnit unit){ retu
此方法将这些时间转换为相同的区域(从第一个参数开始的区域),然后调用直到在Temporal接口中声明的方法:
static long zonedDateTimeDifference(ZonedDateTime d1, ZonedDateTime d2, ChronoUnit unit){
return unit.between(d1, d2);
}
由于ZonedDateTime和LocalDateTime都实现了Temporal接口,您还可以为这些日期时间类型编写通用方法:static long dateTimeDifference(Temporal d1, Temporal d2, ChronoUnit unit){
return unit.between(d1, d2);
}
但请记住,对混合LocalDateTime和ZonedDateTime调用此方法会导致DateTimeException希望能有所帮助。tl;博士 小时、分钟、秒:
Duration.between( zdtA , zdtB ) // Represent a span-of-time in terms of days (24-hour chunks of time, not calendar days), hours, minutes, seconds. Internally, a count of whole seconds plus a fractional second (nanoseconds).
年、月、日:
Period.between( // Represent a span-of-time in terms of years-months-days.
zdtA.toLocalDate() , // Extract the date-only from the date-time-zone object.
zdtB.toLocalDate()
)
细节
这是正确的,显示
持续时间
和期间
另一条路线是和类。第一个用于较短的时间跨度(小时、分钟、秒),第二个用于较长的时间跨度(年、月、日)
通过调用toString
在中生成字符串。格式为PnYnMnDTnHnMnS
,其中P
标记开始,而T
分隔两部分
String output = d.toString();
在Java9和更高版本中,调用to…Part
方法来获取各个组件。在中讨论
示例代码
2016-12-11T03:07:50.639-05:00[美国/蒙特利尔]/2016-12-11T06:14:50.639-05:00[美国/蒙特利尔]
PT3H7M
看
Interval
&LocalDateRange
该项目向java.time类添加了功能。它的一个方便的类是将时间跨度表示为时间轴上的一对点。另一个是,对于一对对象。相比之下,期间
和持续时间
类各自表示一个时间跨度,而不是附加到时间轴上
Interval
的工厂方法采用一对即时
对象
Interval interval = Interval.of( zdtStart.toInstant() , zdtStop.toInstant() );
您可以从间隔
获取持续时间
Duration d = interval.toDuration();
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,& 该项目现已启动,建议迁移到类 要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是 您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*
类
从哪里获得java.time类
- 然后
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 更高版本的Android捆绑包实现了java.time类
- 对于早期的Android(发布一个具体的例子,说明你想要实现什么,并得到什么结果。Michał的答案正是我所期望的。非常感谢!你在哪里看到一个
替换为之间的。谢谢。Duration与ZonedDateTime一起工作,Period与LocalDate一起工作。调用方法toLocalDate()需要在我们的zdt对象上完成。@guillaumeguerin您是对的。修复了我的代码示例。谢谢。哦,非常感谢,您的示例非常好!!!!有没有办法在两个zdt的ZoneId不同的两个zdt类型之间获得差异?@stanlick Yes:的
的方法,持续时间为两个瞬间?我只看到
@BrianGordon已修复,将公共静态持续时间(长量,临时单位)
如中所示。我想Duration.between(zdtA,zdtB)
方法只是在这两个对象上调用between
。ZonedDateTime::toInstant()
Interval interval = Interval.of( zdtStart.toInstant() , zdtStop.toInstant() );
Duration d = interval.toDuration();