我偶然發現過幾次這個問題,並且有一些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,並且考慮在飛行中做這件事實在太痛苦) –
爲什麼要預先計算並緩存一些可以在固定時間內完成的事情? –
因爲,根據您的使用情況,可能會更快。特別是如果你的實現語言在計算時很慢。 –