国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

golang 生成一年的周數(shù)

這篇具有很好參考價值的文章主要介紹了golang 生成一年的周數(shù)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

golang 生成一年的周數(shù),golang文章來源地址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
}

到了這里,關(guān)于golang 生成一年的周數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包