如何计算Golang中的工作日数

sek*_*met 5 go

到目前为止,我已经使用http://golang.org/pkg/time/来计算天数,但我不知道如何排除周末,只计算工作日。

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Now()
    f := time.Date(2015, time.August, 21, 24, 0, 0, 0, time.UTC)
    diff := f.Sub(t)

    // convert diff to days
    days := int(diff.Hours() / 24)

    fmt.Printf("days  %d\n", days)
}
Run Code Online (Sandbox Code Playgroud)

eva*_*nal 3

这是一个简单的小解决方案。

days := 0
for {
     if (t.Equal(f)) {
         return days
     }
     if (t.Weekday() != time.Saturday && t.Weekday() != time.Sunday) {
          days++
     }
     t = t.Add(time.Hour*24)
}
Run Code Online (Sandbox Code Playgroud)

您可能不想使用原始t变量,但要保持示例简单。我循环直到tequals f,如果它们相等,我返回我的天数。如果不是,我会检查以确保这是工作日,如果是,则增加我的天数。我无条件地在开始时间上增加一天。

  • 您可以将天数除以七以获得周数,然后乘以五以获得工作日数。然后您需要进行某种修复以使数字正确。这是一个 O(1) 过程,而不是 O(n) 过程,并且应该快得多,特别是对于较长的时间段。我现在太累了,无法处理细节。 (2认同)