73 lines
1.4 KiB
Go
73 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
e "codeberg.org/pebbe/errors"
|
|
|
|
"fmt"
|
|
"os"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
x = e.ExitErr
|
|
)
|
|
|
|
func main() {
|
|
aa := strings.Split(os.Args[1], "-")
|
|
if len(aa) != 2 {
|
|
x(fmt.Errorf("ongeldig argument, moet in formaat yyyy-dd zijn"))
|
|
}
|
|
|
|
year, err := strconv.Atoi(aa[0])
|
|
x(err)
|
|
week, err := strconv.Atoi(aa[1])
|
|
x(err)
|
|
|
|
weken, err := strconv.Atoi(os.Args[2])
|
|
|
|
if year < 1000 || year > 9999 {
|
|
x(fmt.Errorf("ongeldig year: %d", year))
|
|
}
|
|
|
|
// 1 januari
|
|
t := time.Date(year, 1, 1, 12, 0, 0, 0, time.UTC)
|
|
|
|
// zoek eerste donderdag
|
|
day := int(t.Weekday()) // 0 = zondag
|
|
donderdag := 4 - day
|
|
if donderdag < 0 {
|
|
donderdag = donderdag + 7
|
|
}
|
|
|
|
// schuif naar maandag voor eerste donderdag: donderdag - 3
|
|
// in de gewenste week: 7 * (week - 1)
|
|
t = t.AddDate(0, 0, donderdag-3+7*(week-1))
|
|
|
|
y, w := t.ISOWeek()
|
|
if y != year || w != week {
|
|
fmt.Println("week number out of range")
|
|
return
|
|
}
|
|
|
|
// voorgaande weken en deze week
|
|
t2 := t.AddDate(0, 0, -7*(weken-1))
|
|
for i := range weken {
|
|
if i > 0 {
|
|
fmt.Print(" -or")
|
|
}
|
|
y, w := t2.ISOWeek()
|
|
fmt.Printf(" -name %d-%02d.data.dz", y, w)
|
|
t2 = t2.AddDate(0, 0, 7)
|
|
}
|
|
|
|
// vanaf begin voorgaande weken t/m eind huidige week
|
|
t = t.AddDate(0, 0, -7*(weken-1))
|
|
for range 7 * weken {
|
|
fmt.Printf(" -or -name %d-%02d-%02d.data.dz", t.Year(), t.Month(), t.Day())
|
|
t = t.AddDate(0, 0, 1)
|
|
}
|
|
|
|
}
|