support December of last year

This commit is contained in:
Muhan Li 2022-03-27 05:39:58 +08:00
parent ac123b2fe7
commit bca7001ebb
8 changed files with 37 additions and 28 deletions

View File

@ -1,12 +1,11 @@
// automatically generated by crawler.py (3/27/2022)
// manually checked by DATA NOT VERIFIED
// manually checked by @bugstop (3/27/2022)
// source: http://www.gov.cn/zhengce/content/2017-11/30/content_5243579.htm
元旦;1.1; // 1月1日放假与周末连休。
元旦;0.2-1.1; // 1月1日放假与周末连休。
春节;2.15-2.21;2.11,2.24 // 2月15日至21日放假调休共7天。2月11日星期日、2月24日星期六上班。
清明节;4.5-4.7;4.8 // 4月5日至7日放假调休共3天。4月8日星期日上班。
劳动节;4.29-5.1;4.28 // 4月29日至5月1日放假调休共3天。4月28日星期六上班。
端午节;6.18; // 6月18日放假与周末连休。
中秋节;9.24; // 9月24日放假与周末连休。
端午节;6.16-6.18; // 6月18日放假与周末连休。
中秋节;9.22-9.24; // 9月24日放假与周末连休。
国庆节;10.1-10.7;9.29,9.30 // 10月1日至7日放假调休共7天。9月29日星期六、9月30日星期日上班。

View File

@ -1,12 +1,11 @@
// automatically generated by crawler.py (3/27/2022)
// manually checked by DATA NOT VERIFIED
// manually checked by @bugstop (3/27/2022)
// source: http://www.gov.cn/zhengce/content/2018-12/06/content_5346276.htm
元旦;12.30;12.29 // 2018年12月30日至2019年1月1日放假调休共3天。2018年12月29日星期六上班。
元旦;0.2-1.1;0.3 // 2018年12月30日至2019年1月1日放假调休共3天。2018年12月29日星期六上班。
春节;2.4-2.10;2.2,2.3 // 2月4日至10日放假调休共7天。2月2日星期六、2月3日星期日上班。
清明节;4.5; // 4月5日放假与周末连休。
清明节;4.5-4.7; // 4月5日放假与周末连休。
劳动节;5.1; // 5月1日放假。
端午节;6.7; // 6月7日放假与周末连休。
中秋节;9.13; // 9月13日放假与周末连休。
端午节;6.7-6.9; // 6月7日放假与周末连休。
中秋节;9.13-9.15; // 9月13日放假与周末连休。
国庆节;10.1-10.7;9.29,10.12 // 10月1日至7日放假调休共7天。9月29日星期日、10月12日星期六上班。

View File

@ -1,6 +1,5 @@
// automatically generated by crawler.py (3/27/2022)
// manually checked by DATA NOT VERIFIED
// manually checked by @bugstop (3/27/2022)
// source: http://www.gov.cn/zhengce/content/2019-11/21/content_5454164.htm
元旦;1.1; // 2020年1月1日放假共1天。

View File

@ -1,6 +1,5 @@
// automatically generated by crawler.py (3/27/2022)
// manually checked by @bugstop (3/27/2022)
// source: http://www.gov.cn/zhengce/content/2020-11/25/content_5564127.htm
元旦;1.1-1.3; // 2021年1月1日至3日放假共3天。

View File

@ -1,6 +1,5 @@
// automatically generated by crawler.py (3/27/2022)
// manually checked by @bugstop (3/27/2022)
// source: http://www.gov.cn/zhengce/content/2021-10/25/content_5644835.htm
元旦;1.1-1.3; // 2022年1月1日至3日放假共3天。

View File

@ -2,9 +2,10 @@ package input
import (
"fmt"
"strings"
"main/parse/base"
"main/parse/data"
"strings"
)
func NewParser() data.Parser {
@ -34,7 +35,7 @@ func parse(raw data.InputRaw) (result base.Holidays, err error) {
Group: groupName,
Name: info[0],
Nth: i + 1,
Date: date(raw.Year, day),
Date: day,
Type: base.Rest,
}
result = append(result, restDay)
@ -46,7 +47,7 @@ func parse(raw data.InputRaw) (result base.Holidays, err error) {
Group: groupName,
Name: info[0],
Nth: i + 1,
Date: date(raw.Year, day),
Date: day,
Type: base.Work,
}
result = append(result, workDay)

View File

@ -2,6 +2,7 @@ package input
import (
"fmt"
"strconv"
"strings"
"time"
)
@ -9,10 +10,15 @@ import (
func date(year int, date string) (result time.Time) {
input := fmt.Sprintf("%04d-%s", year, date)
result, _ = time.Parse("2006-1.2", input)
if date[0] == '0' { // => 0001-1.1
delta, _ := strconv.Atoi(date[2:]) // days before
result = result.AddDate(year-1, 0, -delta)
}
return
}
func holidays(year int, daysRaw string) (result []string) {
func holidays(year int, daysRaw string) (result []time.Time) {
if daysRaw == "" {
return
}
@ -22,10 +28,10 @@ func holidays(year int, daysRaw string) (result []string) {
if strings.Contains(day, "-") {
period := strings.Split(day, "-")
for d := date(year, period[0]); !d.After(date(year, period[1])); d = d.AddDate(0, 0, 1) {
result = append(result, d.Format("1.2"))
result = append(result, d)
}
} else {
result = append(result, day)
result = append(result, date(year, day))
}
}
return result

View File

@ -21,6 +21,7 @@ func Test_date(t *testing.T) {
{"3", args{2003, "11.1"}, time.Date(2003, 11, 1, 0, 0, 0, 0, time.UTC)},
{"4", args{2004, "11.11"}, time.Date(2004, 11, 11, 0, 0, 0, 0, time.UTC)},
{"5", args{2005, "1.41"}, time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC)},
{"6", args{2006, "0.1"}, time.Date(2005, 12, 31, 0, 0, 0, 0, time.UTC)},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
@ -41,16 +42,22 @@ func Test_holidays(t *testing.T) {
args args
wantResult []string
}{
{"1", args{1, "1.1"}, []string{"1.1"}},
{"2", args{1, "1.1,2.2"}, []string{"1.1", "2.2"}},
{"3", args{1, "1.1-1.3"}, []string{"1.1", "1.2", "1.3"}},
{"4", args{1, "1.1-1.3,2.2,3.3-3.4"}, []string{"1.1", "1.2", "1.3", "2.2", "3.3", "3.4"}},
{"5", args{1, "1.31-2.2"}, []string{"1.31", "2.1", "2.2"}},
{"1", args{1, "1.1"}, []string{"01.1.1"}},
{"2", args{1, "1.1,2.2"}, []string{"01.1.1", "01.2.2"}},
{"3", args{1, "1.1-1.3"}, []string{"01.1.1", "01.1.2", "01.1.3"}},
{"4", args{1, "1.1-1.3,2.2,3.3-3.4"}, []string{"01.1.1", "01.1.2", "01.1.3", "01.2.2", "01.3.3", "01.3.4"}},
{"5", args{1, "1.31-2.2"}, []string{"01.1.31", "01.2.1", "01.2.2"}},
{"6", args{1, "0.2"}, []string{"00.12.30"}},
{"7", args{1, "0.4-0.1"}, []string{"00.12.28", "00.12.29", "00.12.30", "00.12.31"}},
{"8", args{1, "0.2-1.2"}, []string{"00.12.30", "00.12.31", "01.1.1", "01.1.2"}},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if gotResult := holidays(tt.args.year, tt.args.daysRaw); !reflect.DeepEqual(gotResult, tt.wantResult) {
t.Errorf("holidays() = %v, want %v", gotResult, tt.wantResult)
gotResult := holidays(tt.args.year, tt.args.daysRaw)
for idx, result := range gotResult{
if !reflect.DeepEqual(result.Format("06.1.2"), tt.wantResult[idx]) {
t.Errorf("holidays() = %v, want %v", result, tt.wantResult[idx])
}
}
})
}