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

标签 java datetime jodatime java-13

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

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

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

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

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

最佳答案

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

我认为您在使用 LocalTime 方面进展顺利和 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);
}

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

关于java - 是否有用于在 Java 中编码本地时间的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61440567/

相关文章:

java - 将 SimpleDateFormat 解析为 JodaTime

jodatime - 使用 Joda-Time 获取时区本地毫秒数的最简单方法

java - 持续的Android后台服务

java - 在 Google Cloud Storage (GCS) 中存储 HashMap 对象

java - 无法使用 Java Mail Api 发送邮件

javascript - ECMAScript 5.1 规范不正确?日期构造函数日期/时间格式解析为 UTC

python - 示例 : how do I make bokeh omit missing dates when using datetime as x-axis

java - ETL设计: What Queue should I use instead of my SQL table and still be able to process in parallel?

Python的timedelta不适用于数据库记录不支持的timedelta秒组件类型: datetime.日期时间

java - 在 JDO/DataNucleus 中,我可以查询 Joda-Time DateTime 对象吗?