74 lines
1.1 KiB
Go
74 lines
1.1 KiB
Go
|
package curl2info
|
||
|
|
||
|
import "time"
|
||
|
|
||
|
type SecondNode int
|
||
|
|
||
|
type MinuteNode struct {
|
||
|
IsOK bool
|
||
|
// Second [60]SecondNode
|
||
|
}
|
||
|
|
||
|
type HourNode struct {
|
||
|
IsOK bool
|
||
|
Minute [60]MinuteNode
|
||
|
}
|
||
|
|
||
|
type DayNode struct {
|
||
|
IsOK bool
|
||
|
|
||
|
Week time.Weekday
|
||
|
Hour [24]HourNode
|
||
|
}
|
||
|
|
||
|
type MonthNode struct {
|
||
|
IsOK bool
|
||
|
MaxDay int
|
||
|
Day []DayNode
|
||
|
}
|
||
|
|
||
|
type TrieYear struct {
|
||
|
Year int
|
||
|
Month [13]MonthNode
|
||
|
}
|
||
|
|
||
|
func CreateTrieYear(year int) *TrieYear {
|
||
|
|
||
|
ty := TrieYear{}
|
||
|
ty.Month[0].IsOK = false
|
||
|
|
||
|
for i := 1; i <= 12; i++ {
|
||
|
cur := time.Date(year, time.Month(i), 1, 0, 0, 0, 0, time.Local)
|
||
|
|
||
|
month := &ty.Month[i]
|
||
|
month.IsOK = false
|
||
|
|
||
|
last := cur.AddDate(0, 1, -1).Day()
|
||
|
month.MaxDay = last
|
||
|
|
||
|
for begin := 0; begin < last; begin++ {
|
||
|
month.Day = append(month.Day, DayNode{})
|
||
|
|
||
|
week := cur.AddDate(0, 0, begin).Weekday()
|
||
|
|
||
|
day := &month.Day[begin]
|
||
|
day.IsOK = false
|
||
|
day.Week = week
|
||
|
|
||
|
for j := 0; j < 24; j++ {
|
||
|
hour := &day.Hour[j]
|
||
|
hour.IsOK = false
|
||
|
|
||
|
for k := 0; k < 60; k++ {
|
||
|
min := &hour.Minute[k]
|
||
|
min.IsOK = false
|
||
|
// 还差一个秒
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
return &ty
|
||
|
}
|