我目前正在一个应用程序域中做一些工作,它使用大于24:00的时间值来表示午夜之后仍然与前一天的细节相关的时间。例如,它可能使用星期一的25:15来表示星期二的凌晨1:15,因为从域的Angular 来看,这个值仍然与星期一的数据相关联。
维基百科关于24小时制的文章中简要提到了这种时间使用方式:
超过24:00的时间符号(例如24:01或25:00而不是00:01或01:00)不常用,也不在相关标准的范围内。然而,在[各个国家]的一些特殊情况下,有时也会用到这些词,因为工作时间超过午夜,例如广播电视制作和调度。
java提供了 LocalTime
表示时间的模型类。然而, LocalTime
限制在给定日期的午夜(含)和第二天的午夜(不含)之间,即在范围内 [0:00-23:59:59.999999999]
.
javatimeapi是灵活编写的,但是核心api中排除了更专门的概念。正如java 8日期与时间库的主要作者策划的“三个额外的项目”中所提到的:
并非所有的日期/时间逻辑都是为jdk设计的。有些概念太过专业化或太过庞大,难以理解。
我还没有幸运地找到一个现有的类型或其他直接的方法来通过核心java库或额外的310个库来建模这个不那么受限的时间类型。然而,很有可能我遗漏了什么,也许是一些相当明显的东西。
我如何在java中对这种不受约束的时间建模,最好使用 java.time
api或它的一个扩展的la的三个额外的项目?我希望能够使用它以文本形式表示时间值(“25:15”),并理想地使用它执行时间计算(例如,将“星期一@25:15”转换为“星期二@1:15 am”)。
如果没有直截了当的方法,我很可能会在“三个十”额外项目中打开一个问题。
2条答案
按热度按时间ghhkc1vu1#
不,那不存在
我确信,三十家的课程或其他地方常用的课程都不能满足你的需求。我能找到的最接近的就是
DayCycles
time4j库的类(链接在底部)。它由一天中的某个时间(a)组成PlainTime
)与一个未指明的日期相对的天数,所以你要求什么;但它是专门用来返回一个PlainTime
而且不提供任何自己的功能。自己旋转
我不认为开发自己的类可以与java.time进行互操作会太难。很可能是因为
java.time.Duration
正如mark b所建议的,取决于更精确的要求。如果您对解析和格式化有严格的要求,那么解析和格式化可能是最困难的部分。可能值得从joda时间库的源代码中获得灵感,因为它包括格式化和解析持续时间的工具。
另一个灵感来源是
java.time.LocalTime
.以下是最开始的几点:
演示:
输出:
25:15
链接
文件
DayCycles
表格时间4Jz9zf31ra2#
我的第一个想法是将其存储为duration对象。您可以很容易地使用该类上的getter来构造
HH:mm
字符串,或者使用类似于apachecommons durationformatutils的内容。这个
LocalDate
以及LocalDateTime
类支持加减持续时间之类的操作。