java - 如何在时间表中表示时间段

标签 java oop

我正在编写一个允许用户注册大学类(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 开始和停止时间的类。此类缺少日期和时区。

我建议定义一个至少包含三个成员的类:

您可能还想跟踪每个槽的时间长度,而不是在运行时重复计算。

枚举适用于数量有限的对象,这些对象的值在编译时已知。我希望您的值在不同学期/季度的运行时会有所不同。所以不适合枚举。

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/

相关文章:

javascript - JS中无法获取继承的类函数

OOP,强制方法调用顺序

java - 如何使用 DRY 原则创建实现相同方法的两种类型的对象

java - 使用 ConcurrentLinkedQueue 进行一些非原子操作

java - 在分配值后将变量添加到 Map 值

java - Webdriver 是否使用 RPC 调用。 webdriver如何控制浏览器?

java - ProGuard:未知选项 ' ?ú$B '

c++ - C++ vector 的二维数组是否适合跟踪二维数组的动态域值?

java - 为什么执行时没有出现Error "Add unimplemented methods"(Eclipse)

java - Netty 使用 TCP 给我一个错误的端口