我正在编写一个允许用户注册大学类(class)的网络应用程序。类(class)可以在特定的时间段内进行——一个时间段是一天(在一周内,即周日、周一等)和一个小时。有固定的时间段可以提供类(class)。我的问题是 - 实现这些时隙的最佳方式是什么?
我曾以为只是使用一个枚举,但后来有 70 个时隙。所以我想到了两个枚举 - 一个用于工作日(尽管我敢打赌这已经存在于某个地方 - 你知道我在哪里可以找到这种现有的枚举吗?)和一个用于允许的时间(例如 - 8:00 , 9:00, 10:00, 等等) 并且有一个 Timeslot
类包含这两个。
不过,我觉得一定有一个我没想到的更优雅的解决方案——你觉得呢?
最佳答案
java.time
您正在使用现在已被 java.time 类取代的麻烦的旧遗留类。
DayOfWeek
java.time.DayOfWeek
class 是一个枚举,它已经定义了七个对象,一个对应一周中的每一天。它们按照标准 ISO 8601 顺序编号,周一至周日为 1-7。
制作WeekTimeSlot
类
似乎您想表示星期几和一天中的时间的一般概念。您没有在时间轴上确定特定时刻。所以你只需要一个 LocalTime
开始和停止时间的类。此类缺少日期和时区。
我建议定义一个至少包含三个成员的类:
您可能还想跟踪每个槽的时间长度,而不是在运行时重复计算。
-
Duration
– 持续时间
枚举适用于数量有限的对象,这些对象的值在编译时已知。我希望您的值在不同学期/季度的运行时会有所不同。所以不适合枚举。
EnumMap
如果您想按星期几对插槽进行分组,请使用 EnumMap
. Map
的实现已针对键值是枚举对象时的使用进行了优化。你会映射 DayOfWeek
反对 List<WeekTimeSlot>
.
这Map
实现占用的内存很少,运行速度非常快。
时间轴上的时刻
如果您需要将这些槽应用到实际时间轴上特定日期的特定时刻,请使用 LocalTime
连同 LocalDate
和一个 ZoneId
得到 ZonedDateTime
.
您可能会发现 Interval
有帮助来自 ThreeTen-Extra 的类(class)项目,java.time 类的扩展。此类表示时间轴上一对时刻之间的时间跨度。
关于java - 如何在时间表中表示时间段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6635797/