java - 如何处理 java.time 中的完整周期?

标签 java period java-time

Periodjava.time 中上课仅处理面向日期的部分:年、月、日。

关于时间部分:小时、分钟、秒?

我们如何解析和生成 ISO 8601 中定义的完整周期的字符串表示形式, PnYnMnDTnHnMnS?例如,一天半:P1DT12H。一学年为九个月,P9M。每年我都会有两周零三天的假期,P17D。客户入住酒店房间 2 天 17 个半小时,P2DT17H30M

PeriodJoda-Time 中上课处理全期。为什么不在 java.time 中?还有其他机制吗?

最佳答案

在 Java SE 8 中,如果需要,应用程序有责任创建一个链接 PeriodDuration 的类。

请注意,Duration 包含秒数,而不是单独的秒数、分钟数和小时数。秒数可以超过 24 小时,因此 Duration 可以表示“天”。但这是固定的 24 小时制。相比之下,“Period 中的“天”的表示是描述性的,并考虑了夏令时。Period 的状态由三个独立的字段组成 - 日、月和年.

请记住,“客户入住酒店房间 2 天 17 个半小时,P2DT17H30M”可能会因 DST 切换而变得复杂。分别使用 PeriodDuration 事情很清楚 - Period 受夏令时切换影响,而 Duration 则不受。

在设计方面,原始的 java.time Period 确实包括小时、分钟和秒。然而,这导致需要许多方法和复杂的 Javadoc 来描述规范化和 DST 的所有可能性。通过分离概念,每个概念与时间线的交互更加清晰。请注意,这两个类还与 SQL 设计相关(“年到月”和“日到秒”概念)。

目前没有计划在该领域为 Java SE 9 添加新类,但不能完全排除,因为 XML/ISO-8601 允许单一组合表示。

关于java - 如何处理 java.time 中的完整周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32366154/

相关文章:

algorithm - 如何在不轮询的情况下获取数据?

java - 尝试使用hibernate从MySQL获取数据,并显示在thymeleaf列表中(循环)

java - 在新窗口中弹出警报

java - 如何在将转换为字符串的长变量中添加数字?

R 时间段重叠

Java - 一段时间后停止executequery()

kotlin - 将 period 添加到 startDate 不会产生 endDate

java - 使用 Jackson 将 Java8 LocalDateTime 序列化为 UTC 时间戳

java - 在给定 JDK 8 DateTimeFormatter 的情况下获取原始模式字符串?

java - 如何在 UDDI 中测试我们的 Java Web 服务