当前位置: 首页 > news >正文

golang 生成一年的周数

// GetWeekTimeCycleForGBT74082005 获取星期周期 中华人民共和国国家标准 GB/T 7408-2005
// 参数 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       //周期结束时间var no int              //yyyy0001var name string         //名称 xxxx年xxxx周var week int            //第几周var spanyear = true     //默认能跨年var timeCycles []TimeCyclevar 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 星期天 是0yearstartweek = 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.lryc.cn/news/278339.html

相关文章:

  • 植物大战僵尸-C语言搭建童年游戏(easyx)
  • c++学习:容器list实战(获取目录返回容器list)
  • 【Linux】Linux系统编程——Linux目录结构
  • 卫星时钟服务器、NTP时钟服务器、GPS北斗网络时钟系统
  • 【Kafka-3.x-教程】-【三】Kafka-Broker、Kafka-Kraft
  • 全网第一篇教你怎么总结多线程知识
  • Mondo备份linux操作系统为iso镜像 —— 筑梦之路
  • 《微信小程序开发从入门到实战》学习七十八
  • React 入门 - 05(响应式与事件绑定)
  • 【APACHE】的认识和基础配置参数
  • 英飞凌TC3xx之一起认识GTM(九)GTM相关知识简述及应用实例(CMU,CCM,TBU,MON)
  • STL之list
  • 【C++】C++11中的常见语法(上)
  • Unity 踩坑记录 AnyState 切换动画执行两次
  • 使用脚本把springboot程序部署到k8s上
  • 使用valgrind 分析缓存命中
  • leetcode-二进制求和
  • 数据采集卡:16通道16位250KHz AD,支持单点采集,程控增益
  • 物联网通讯协议NB-lot和LoRa差异分析
  • 回归预测 | Matlab基于SMA+WOA+SFO-LSSVM多输入单输出回归预测
  • Redis内存策略:「过期Key删除策略」+ 「内存淘汰策略」
  • el-table 个体行绑定点击事件时 表格中有el-radio和el-checkbox 点击触发两次事件处理方法
  • CentOs 环境下使用 Docker 部署 Ruoyi-Vue
  • axios 后端不配和添加api
  • 力扣LCR 166. 珠宝的最高价值(java 动态规划)
  • 【Python基础】一文搞懂:Python 中 Excel 文件的写入与读取
  • 二叉树题目:完全二叉树插入器
  • 用MATLAB求最短路径(graphshortestpath)和求最小生成树(minspantree),代码演示
  • 用win系统搭建Minecraft世界服务器,MC开服教程,小白开服教程
  • MacOS安装Miniforge、Tensorflow、Jupyter Lab等(2024年最新)