文章來源地址http://www.zghlxwxcb.cn/news/detail-790960.html
// GetWeekTimeCycleForGBT74082005 獲取星期周期 中華人民共和國國家標準 GB/T 7408-2005
// 參數(shù) year 年份 GB/T 7408-2005
func GetWeekTimeCycleForGBT74082005(year int) (*[]TimeCycle, error) {
var yearstart time.Time //當年最開始一天
var yearend time.Time //當年最后一天
var yearstartweek int //當年第一年周幾
var yearendweek int //當年最后一天周幾
var start time.Time //周期開始時間
var end time.Time //周期結(jié)束時間
var no int //yyyy0001
var name string //名稱 xxxx年xxxx周
var week int //第幾周
var spanyear = true //默認能跨年
var timeCycles []TimeCycle
var loc, err = time.LoadLocation("Local")
if err != nil {
return nil, err
}
yearstart, err = time.ParseInLocation("2006-01-02 15:04:05", fmt.Sprintf("%d", year)+"-01-01 00:00:00", loc)
if err != nil {
return nil, err
}
yearend, err = time.ParseInLocation("2006-01-02 15:04:05", yearstart.AddDate(1, 0, -1).Format("2006-01-02")+" 23:59:59", loc) //加一年 減一天得到
if err != nil {
return nil, err
}
// Sunday Weekday = iota 星期天 是0
yearstartweek = int(yearstart.Weekday()) //1月1號是星期幾
yearendweek = int(yearend.Weekday()) //12月31號是星期幾
if yearendweek > 0 && yearendweek <= 3 { //如果今年的最后一天是周1到周3 說明是要被包含的 此時不應該跨年
spanyear = false
}
var addDay = (8 - yearstartweek) % 7 //如果今天是 星期一 則無需處理 如果是0則+1 1則+0 2則+6 3則+5 4則+4 5則+3
//第一周
if yearstartweek == 0 || yearstartweek == 5 || yearstartweek == 6 { //當1月1號是周五 周六 或者 周日 則這幾天(0-2)是屬于上一年的周期
yearstart = yearstart.AddDate(0, 0, addDay)
} else { //否則上一年后幾天(0-3)是屬于這一年的
yearstart = yearstart.AddDate(0, 0, -1*(yearstartweek-1))
}
for {
start = yearstart.AddDate(0, 0, week*7)
end, err = time.ParseInLocation("2006-01-02 15:04:05", start.AddDate(0, 0, 6).Format("2006-01-02")+" 23:59:59", loc) //加一周
if err != nil {
return nil, err
}
week++
no, _ = strconv.Atoi(fmt.Sprintf("%d%04d", year, week))
name = fmt.Sprintf("%d年%d周", year, week)
if start.Year() <= year && //其實年必須在當前年
(end.Year() == year || //在當前年
(end.Year() >= year && spanyear)) { //不在當前年 看是否可以跨年
timeCycles = append(timeCycles, TimeCycle{
No: no,
Name: name,
StartTime: start,
EndTime: end,
})
} else {
break
}
}
return &timeCycles, nil
}
文章來源:http://www.zghlxwxcb.cn/news/detail-790960.html
到了這里,關(guān)于golang 生成一年的周數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!