我有订单在一周的不同时间进入,我有一套规则,我们什么时候能够接受订单。例如,我们不接受周三下午4:45至下午5:15之间的订单。因此,如果订单在下午3点进来,一切都很好。如果订单在下午5点进来,我们需要拒绝它。这些规则基于星期几,每天更改。
我的问题是,使用joda时间,检查当前时间是否在此时间窗口的最佳方法是什么?
我对其他技术持开放态度,但我目前正通过scala工具时间包装器使用joda时间。
我目前正在使用类似的东西:
val now = DateTime.now
val wednesdayNoTradeInterval:Interval = ??
now.getDayOfWeek match {
case WEDNESDAY => wednesdayNoTradeInterval.contains(now)
}
答案 0 :(得分:2)
您可以尝试这样的事情:
implicit def dateTimeToLocalTime(dateTime: DateTime) = dateTime.toLocalTime
type Interval[T] = (T, T)
def during(interval: Interval[LocalTime])(time: LocalTime) = interval match {
case (start, end) => start < time && time < end
}
def day(day: Int)(time: DateTime) = time.dayOfWeek.get == day
val fourish = new LocalTime(16, 45)
val afternoon = during((fourish, (fourish + (30 minutes)) )) _
val wednesday = day(WEDNESDAY) _
val thursday = day(THURSDAY) _
def acceptingOrders = !{
val now = DateTime.now
wednesday(now) && afternoon(now)
thursday(now) && afternoon(now)
}
并像这样使用它:
acceptingOrders // ?
答案 1 :(得分:0)
查看JChronic中的Span类:https://github.com/samtingleff/jchronic/blob/master/src/main/java/com/mdimension/jchronic/utils/Span.java
创建类似的东西并做一个很简单!&lt;&gt;检查毫秒的时间。
答案 2 :(得分:0)
对于一周中的每一天,存储一系列LocalTime实例,其中订单被拒绝。
然后,当订单放置在给定的DateTime时,获取与dateTime的星期几相关联的对,将DateTime转换为LocalTime,并检查该LocalTime是否包含在至少一对的开始和结束之间。