gpt4 book ai didi

java 为 dayOfWeek 和没有特定日期的时间创建日期,即对任何星期一有效

转载 作者:行者123 更新时间:2023-11-30 06:43:00 26 4
gpt4 key购买 nike

如何创建通用日期(即不附加到任何实际的 yyMMdd 但类似于:

val START = LocalTime.of(startHour, startMinute)
val END = LocalTime.of(endHour, endMinute)

但是,我还想包括 dayOfWeek

我的目的是计算时间间隔的重叠,即对于两个给定的(开始、结束)时间戳,我想计算与指定工作日和时间(即营业时间)的重叠。

编辑

我不确定自定义类是否足够好。我的意图是如果我有一个事件列表,例如:

id,start,end
1,2018-01-01 08:00, 2018-01-01 08:00 || opening hours 8-10, duration: 1
2,2018-01-01 10:00, 2018-01-01 12:00 || opening hours 8-10, duration: 0
3,2018-01-02 10:00, 2018-01-02 12:00 || opening hours 10-15, duration 2

验证 start-end 的时间间隔是否与另一个时间间隔(即营业时间)相交,但另一个时间间隔取决于星期几。

构建对象后(我目前可能有我无法以通用方式组合 dayOfWeek 和 Time 的地方)

我会使用 isBefore/isAfter 几次,然后计算重叠的持续时间。

最佳答案

只需使用 DayOfWeek Java 内置的枚举。它提供七个预定义对象,一个对应一周中的每一天,例如 DayOfWeek.MONDAY

我没有完全理解您的业务问题,但听起来您需要定义自己的类。

public class Shift {
DayOfWeek dayOfWeek ;
LocalTime startTime , stopTime ;
}

添加一种将其转化为真实时刻的方法。

public ZonedDateTime startAtDate( LocalDate ld , ZoneId z ) {
LocalDate LocalDate = ld.with( TemporalAdjustors.previousOrSame( this.dayOfWeek ) ) ;
ZonedDateTime zdt = ZonedDateTime.of( localDate , this.startTime , z ) ;
return zdt ;
}

您可能希望将 ThreeTen-Extra 库添加到您的项目中。它提供了诸如 IntervalLocalDateTime 之类的类,您可能会发现它们很有用。这些类提供了一堆比较方法,例如 abutsoverlaps 等。

看起来该库缺少 LocalTimeRange,因此可能需要自己动手。甚至可以为该项目捐赠这样的类(class)。


关于java.time

java.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧类 legacy日期时间类,例如 java.util.Date , Calendar , & SimpleDateFormat .

Joda-Time项目,现在在maintenance mode , 建议迁移到 java.time类。

要了解更多信息,请参阅 Oracle Tutorial .并在 Stack Overflow 中搜索许多示例和解释。规范为 JSR 310 .

您可以直接与您的数据库交换java.time 对象。使用JDBC driver符合 JDBC 4.2或以后。不需要字符串,不需要 java.sql.* 类。

从哪里获得 java.time 类?

关于java 为 dayOfWeek 和没有特定日期的时间创建日期,即对任何星期一有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52540796/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com