是否有用于在 Java 中编码本地时间的类?

Mit*_*ehn 5 java datetime jodatime java-13

我想创建一个每周一次的时间表。

因为从一个星期到下一个星期的时间表是一样的,所以我需要存储的唯一信息是一周中的哪一天,以及它发生的时间。例如。Monday 2:30pm. 实际日期并不重要,时区也不重要。

到目前为止,我一直在编写我的代码,将日期和时间分开,使用DayOfWeek枚举和LocalTime类型来处理时间。但是我开始遇到使用两个变量来管理时间而不是像 DateTime 这样的单一方便类型来管理时间的问题。例如。如果我想在星期二晚上 11 点之后 3 小时获得时间,我可以使用该LocalTime.plus()方法获得凌晨 2 点,但这并没有考虑当天的滚动,我必须单独检查和更新。

我还想确保从周末到开始我有任何解决方案:例如。周日晚上 10 点之后的 5 小时应该是周一凌晨 3 点。

JDK 中是否存在这样的类,或者定义您自己的时间类型是否足够容易?或者使用java提供的LocalDateTime解决一些问题会更好,并以某种方式忽略日期组件?

MC *_*ror 5

JDK内部没有这样的内置类,但是自己创建这样的类应该不会太难。

我认为您在使用LocalTimeand 方面处于良好的轨道上DayOfWeek。确保编写一个包装这两个组件的类,然后添加方法以将时间单位添加到包装对象。

其中一种方法可能如下所示:

public WeekDayTime plusHours(int hours) {
    int plusDays = (hours / 24);
    int plusHours = hours % 24;
    if (this.time.getHours() + plusHours >= 24) {
        plusDays++;
        plusHours -= 24;
    }
    DayOfWeek newDayOfWeek = ...; // Calculate the day of week somehow
    LocalTime newTime = this.time.plusHours(plusHours);
    return new WeekDayTime(newDayOfWeek, newTime);
}
Run Code Online (Sandbox Code Playgroud)

或者,您也可以包装 aLocalDateTime并隐藏日期组件。这将使您免于执行这些计算。但是,请确保您equals正确实现了例如该方法。