【发布时间】:2025-11-29 08:50:01
【问题描述】:
我目前正在使用大于 24:00 的时间值表示午夜之后仍与前一天的详细信息相关联的时间值的应用程序域中做一些工作。例如,它可能使用星期一的 25:15 来表示星期二的凌晨 1:15,因为从域的角度来看,这个值仍然与星期一的数据相关联。
在24-hour clock 的*文章中简要提到了这种类型的时间使用:
24:00 之后的时间表示法(例如 24:01 或 25:00 而不是 00:01 或 01:00)不常用,相关标准也未涵盖。但是,在营业时间超过午夜的 [各个国家/地区] 的某些特殊情况下,它们偶尔会被使用,例如广播电视制作和调度。
Java 提供了LocalTime 模型类来表示时间。但是,LocalTime 被限制在给定日期的午夜(包括)和第二天的午夜(不包括)之间,即在[0:00-23:59:59.999999999] 的范围内。
Java Time API 的编写很灵活,但核心 API 中排除了更专业的概念。正如 Java 8 日期和时间库的主要作者策划的 ThreeTen Extra 项目中所述:
并非每一段日期/时间逻辑都适用于 JDK。有些概念过于专业或过于庞大而无法融入其中。
我没有运气找到现有类型或其他直接方法来通过核心 Java 库或ThreeTen Extra 对这种约束较少的时间类型进行建模。但是,我很可能遗漏了一些东西,也许是相当明显的东西。
如何在 Java 中模拟这种约束较少的时间,理想情况下使用 java.time API 或其扩展,例如 ThreeTen-Extra 项目?我希望能够使用它以文本方式表示时间值(“25:15”)并理想地使用它执行时间计算(例如,将“星期一 @ 25:15”转换为“星期二 @ 1:15 AM”)。
如果没有直接的方法,我可能最终会在 Threeten-Extra 项目中提出问题。
【问题讨论】:
-
我清楚地看到了需要。我曾经在开发一个公交车时刻表系统。我们在一天中的某个时间从 0:00 到 36:00 有自己的本土课程,精度为 1 分钟,因为夜间巴士通常被计划为前一天时间表的一部分(我从未见过它用于超过4 AM (28:00),但宁愿使范围太大而不是太小)。显然,我们拥有平时打印的功能。当一辆公共汽车23:58出发,0:03到达下一站时,时间表用户无需解释,他们理解。我们只需要在内部进行区分。