小编典典

如何在java.time中处理整个期间?

java

java.time中Period处理面向日期的部分:年,月,日。

时间部分呢:小时,分钟,秒?

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

Joda-TimePeriod课程为全日制。为什么不在java.time中?还有其他机制吗?


阅读 296

收藏
2020-09-28

共1个答案

小编典典

org.threeten.extra.PeriodDuration

ThreeTen-EXTRA
项目提供一类组合PeriodDuration。简单地叫PeriodDuration

ISO-8601日历系统中的时间量,其中包含时间段和持续时间。

此类根据时间段和持续时间来建模时间量或时间量。期限是基于日期的时间量,包括年,月和日。持续时间是基于时间的时间量,由秒和纳秒组成。有关更多详细信息,请参见Period和Duration类。

时段中的日期考虑了夏令时更改(23或25小时制)。执行计算时,先添加期间,然后添加持续时间。

警告:请务必阅读odaStephen的答案,以了解尝试合并Period和所涉及的问题Duration。在实践中这样做是没有意义的,尽管这与我们的直觉相反。

在Java SE 8中,应用程序负责创建类链接Period,Duration如果需要的话。

请注意,aDuration包含秒数,而不是秒,分钟和小时。秒数可能超过24小时,因此aDuration可以代表“天”。但这是每天24小时固定的时间。相比之下,“ day in”的表示Period是描述性的,并考虑了DST。a的状态Period由三个独立的字段-天,月和年形成。

请记住,“客户在酒店房间呆了2天17个半小时,P2DT17H30M”可能会因DST转换而变得复杂。分别使用PeriodDuration清除情况很明确-Period受DST转换的影响,但Duration不是。

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

目前尚无计划在该区域为Java SE 9添加新类,但是由于XML /ISO-8601允许使用单个组合表示形式,因此不能完全排除它。

2020-09-28