78 lines
1.3 KiB
Go
78 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
e "codeberg.org/pebbe/errors"
|
|
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
"slices"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
type Date struct {
|
|
Week string `json:"week"`
|
|
First string `json:"first"`
|
|
Last string `json:"last"`
|
|
}
|
|
|
|
var (
|
|
x = e.ExitErr
|
|
|
|
dates = make([]Date, 0)
|
|
)
|
|
|
|
func main() {
|
|
|
|
files, err := os.ReadDir("/net/corpora/nlnieuws/data/json")
|
|
x(err)
|
|
|
|
for _, file := range files {
|
|
filename := file.Name()
|
|
if strings.HasPrefix(filename, "DATA-") && strings.HasSuffix(filename, "-4.json") {
|
|
addWeek(filename[5:12])
|
|
}
|
|
}
|
|
|
|
slices.Reverse(dates)
|
|
b, err := json.Marshal(dates)
|
|
x(err)
|
|
fmt.Println(string(b))
|
|
|
|
}
|
|
|
|
func addWeek(s string) {
|
|
|
|
week, err := strconv.Atoi(s[5:])
|
|
x(err)
|
|
year, err := strconv.Atoi(s[:4])
|
|
x(err)
|
|
|
|
// 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))
|
|
t2 := t.AddDate(0, 0, 6)
|
|
|
|
dates = append(dates, Date{
|
|
Week: s,
|
|
First: makeDate(t),
|
|
Last: makeDate(t2),
|
|
})
|
|
}
|
|
|
|
func makeDate(d time.Time) string {
|
|
return fmt.Sprintf("%d-%02d-%02d", d.Year(), int(d.Month()), d.Day())
|
|
}
|