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()
)
ThreeTen-Extra项目为java.time类添加了功能。它的一个方便的类是Interval,用于将时间跨度表示为时间线上的一对点。另一个是LocalDateRange,用于表示一对LocalDate对象。相比之下,Period和Duration类中的每一个都将时间跨度表示为 * not * attached to the timeline。 Interval的工厂方法接受一对Instant对象。
3条答案
按热度按时间olqngx591#
您可以使用ChronoUnit中的方法 between。
此方法将这些时间转换为相同区域(第一个参数中的区域),然后调用Temporal接口中声明的 until 方法:
由于ZonedDateTime和LocalDateTime都实现了Temporal接口,因此您还可以为这些日期-时间类型编写通用方法:
但请记住,为混合的LocalDateTime和ZonedDateTime调用此方法会导致DateTimeException。
sbtkgmzw2#
TL;医生
小时、分钟、秒:
年,月,日:
详情
Answer by Michal S正确,显示为
ChronoUnit
。一米一米一和一米二米一
另一种方法是
Duration
和Period
类,第一种用于较短的时间跨度(小时、分钟、秒),第二种用于较长的时间跨度(年、月、天)。通过调用
toString
生成标准ISO 8601格式的字符串。格式为PnYnMnDTnHnMnS
,其中P
标记开头,T
分隔两个部分。在Java9和更高版本中,调用
to…Part
方法来获取各个组件,在another Answer of mine中讨论。示例代码
2016年12月11日星期三03:07:50.639 - 05:00 [美洲/蒙特利尔]/2016年12月11日星期六06:14:50.639 - 05:00 [美洲/蒙特利尔]
PT3H7M型
参见live code in IdeOne.com。
一米十一米十一
ThreeTen-Extra项目为java.time类添加了功能。它的一个方便的类是
Interval
,用于将时间跨度表示为时间线上的一对点。另一个是LocalDateRange
,用于表示一对LocalDate
对象。相比之下,Period
和Duration
类中的每一个都将时间跨度表示为 * not * attached to the timeline。Interval
的工厂方法接受一对Instant
对象。您可以从
Interval
获得Duration
。大约 * java.时间 *
java.time框架内置于Java 8及更高版本中,这些类取代了麻烦的旧legacy日期-时间类,如
java.util.Date
、Calendar
和SimpleDateFormat
。Joda-Time项目(现在在maintenance mode中)建议迁移到java.time类。
要了解更多信息,请参阅Oracle Tutorial。并搜索堆栈溢出以获取许多示例和解释。规范是JSR 310。
您可以直接与数据库交换 * java. time * 对象。使用与JDBC 4.2兼容的JDBC driver或更高版本。不需要字符串,也不需要
java.sql.*
类。从哪里获得java. time类?
ThreeTen-Extra项目使用附加类扩展了java.time。该项目是将来可能添加到java.time的试验场。您可能会在这里找到一些有用的类,如
Interval
、YearWeek
、YearQuarter
和more。4dc9hkyq3#
这将为您提供两个ZonedDateTimes之间的分钟数。