当前位置: 首页 > 面试题库 >

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

寇坚成
2023-03-14
问题内容

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

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

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

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


问题答案:

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允许使用单个组合表示形式,因此不能完全排除它。



 类似资料:
  • 但我得到了NullPointerException任何人都可以帮忙

  • 问题内容: 我知道JAXB(用于XML绑定的Java体系结构)可以编组/ 取消编组java.util.Date对象,如Blaise Doughan的回答所示 。 但有关新东西java.time包中的对象的Java 8,如?JAXB是否已更新以处理此新内置数据类型? 问题答案: 在Java SE 8中,JAXB尚未更新以支持 java.time 类型。 实际上,在参考实现中存在与此相关的问题。 您需

  • 这并不是关于如何在Spring MVC或任何东西中处理异常。我特别需要处理spring启动时可能发生的异常,即在初始化整个应用程序上下文之前。 作为一个背景,所讨论的应用程序是一个物联网节点,允许远程访问电子设备。它内置了一个小h2数据库来保存一些数据。这些数据有时很好,但对应用程序的工作来说并不是真正必要的。 很可能应用程序运行的设备每隔一段时间就会断电一次,如果在对数据库进行写入操作时发生这种

  • 问题内容: 我想要一个文本区域,可以处理按 Tab 键的情况。 在默认情况下,如果您按 Tab 键,则焦点将离开文本区域。但是,当用户想要在文本区域中输入 Tab 键时会怎样呢? 我可以捕捉到此事件并将焦点返回到文本区域并将标签添加到 当前 光标位置吗? 问题答案:

  • 问题内容: 我收到此异常: 源自此代码: 哪里是。 所以这对我来说很好- 我知道数据库中存在零日期,我需要能够读取这些日期并将其转换为下游数据结构中的适当数据(可能为空)。问题是我不知道如何检索它并得到“软”错误。我考虑过将这一行包装在SQLException的try / catch中,但了解这会破坏ResultSet的有效性。 是否有可能以其他方式读取此值而不会引发SQLException? 问

  • 问题内容: 在使用SQL时,我是一个新手,我想做的是仅使用月份和年份选择waterUsage和lectriccityUsage,然后从上一年中选择waterUsage和lectriccityUsage。 但是,我似乎无法找出使用日期的适当方法来完成这项工作。 表:每月帐单 或者 问题答案: 一种选择是使用: 假设您实际上使用的是Oracle,而不是SQL Server。 如果需要,然后继续,然后在