Period
在 java.time 中上课仅处理面向日期的部分:年、月、日。
关于时间部分:小时、分钟、秒?
我们如何解析和生成 ISO 8601 中定义的完整周期的字符串表示形式, PnYnMnDTnHnMnS
?例如,一天半:P1DT12H
。一学年为九个月,P9M
。每年我都会有两周零三天的假期,P17D
。客户入住酒店房间 2 天 17 个半小时,P2DT17H30M
。
最佳答案
在 Java SE 8 中,如果需要,应用程序有责任创建一个链接 Period
和 Duration
的类。
请注意,Duration
包含秒数,而不是单独的秒数、分钟数和小时数。秒数可以超过 24 小时,因此 Duration
可以表示“天”。但这是固定的 24 小时制。相比之下,“Period
中的“天”的表示是描述性的,并考虑了夏令时。Period
的状态由三个独立的字段组成 - 日、月和年.
请记住,“客户入住酒店房间 2 天 17 个半小时,P2DT17H30M”可能会因 DST 切换而变得复杂。分别使用 Period
和 Duration
事情很清楚 - Period
受夏令时切换影响,而 Duration
则不受。
在设计方面,原始的 java.time Period
确实包括小时、分钟和秒。然而,这导致需要许多方法和复杂的 Javadoc 来描述规范化和 DST 的所有可能性。通过分离概念,每个概念与时间线的交互更加清晰。请注意,这两个类还与 SQL 设计相关(“年到月”和“日到秒”概念)。
目前没有计划在该领域为 Java SE 9 添加新类,但不能完全排除,因为 XML/ISO-8601 允许单一组合表示。
关于java - 如何处理 java.time 中的完整周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32366154/