Joda - 确定当前时间是否在指定的每周时间段内

时间:2012-12-14 18:13:13

标签: java scala datetime jodatime

我有订单在一周的不同时间进入,我有一套规则,我们什么时候能够接受订单。例如,我们不接受周三下午4:45至下午5:15之间的订单。因此,如果订单在下午3点进来,一切都很好。如果订单在下午5点进来,我们需要拒绝它。这些规则基于星期几,每天更改。

我的问题是,使用joda时间,检查当前时间是否在此时间窗口的最佳方法是什么?

我对其他技术持开放态度,但我目前正通过scala工具时间包装器使用joda时间。

我目前正在使用类似的东西:

  val now = DateTime.now
  val wednesdayNoTradeInterval:Interval = ??

  now.getDayOfWeek match {
    case WEDNESDAY => wednesdayNoTradeInterval.contains(now)
  }

3 个答案:

答案 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是否包含在至少一对的开始和结束之间。