我偶然发现过几次这个问题,并且有一些SO的答案,但它们非常缓慢,例如,最快的算法来计算两个日期之间的营业日数?
def businessDaysBetween(startDate: DateTime, endDate: DateTime): Seq[DateTime] = {
1 to daysBetween(startDate, endDate) map {
startDate.withFieldAdded(DurationFieldType.days(), _)
} diff holidays filter {
_.getDayOfWeek() match {
case DateTimeConstants.SUNDAY | DateTimeConstants.SATURDAY => false
case _ => true
}
}
}
def daysBetween(startDate: DateTime, endDate: DateTime) =
Days.daysBetween(startDate.toDateMidnight(), endDate.toDateMidnight()).getDays()
我的问题不仅是如何计算两个日期之间的工作日数,而且是最快的解决方案。请注意,我只需要知道工作日数而不是实际日期。
根据您的使用情况,预先计算并查找它(我们实际上是在一家公司中为一年剩余的日子做了这些工作 - 我们使用的是Lotus Notes,并且考虑在飞行中做这件事实在太痛苦) –
为什么要预先计算并缓存一些可以在固定时间内完成的事情? –
因为,根据您的使用情况,可能会更快。特别是如果你的实现语言在计算时很慢。 –