原文地址声明:https://blog.csdn.net/qq_23179075/article/details/99415124

golang 实现按天、周、月、年平分时间

type TimeInterval struct {StartTime stringEntTime   string
}/** @Author: 郑亮* @Description: 按天,周,月,年平分时间* @Date: 2019/8/13 11:09* @param: divideType: day:天 ; week:周;month:月;year:年* @param: divideCount: 分割的份数* @param: layout: 因为按月、年平分时间时是传递的具体时间,可以自定义时间格式化模板* @param: curreTime: 需要分割的时间,可变参数,当按月、年分割时必填* @return: err ,tis*/
func TimeDivide(divideType string, divideCount int, layout string, curreTime ...time.Time) (err error, tis []TimeInterval) {const dayMillisecond = 24 * 60 * 60 * 1000start, _ := time.ParseInLocation("15:04", "00:00", time.Local)totalMillisecond := 0//按天if divideType == "day" {totalMillisecond = dayMillisecondif layout == "" {layout = "15:04"}}//周if divideType == "week" {totalMillisecond = 7 * dayMillisecondif layout == "" {layout = "星期2-15:04"}}//月if divideType == "month" {if len(curreTime) == 0 {return errors.New("当按月分割时间段时,请传入具体要分割的时间"), nil}t := curreTime[0]start = time.Date(t.Year(), t.Month(), 1, 0, 0, 0, 0, time.Local)totalMillisecond = MonthDataCount(t.Year(), int(t.Month())) * dayMillisecondif layout == "" {layout = "02号-15:04:05"}}//年if divideType == "year" {if len(curreTime) == 0 {return errors.New("当按年分割时间段时,请传入具体要分割的时间"), nil}t := curreTime[0]start = time.Date(t.Year(), 1, 1, 0, 0, 0, 0, time.Local)totalMillisecond = YearDataCount(t.Year()) * dayMillisecondif layout == "" {layout = "01月02日-15:04:05"}}for i := 0; i < divideCount; i++ {startDivider := totalMillisecond / divideCount * iendDivider := totalMillisecond / divideCount * (i + 1)tis = append(tis, TimeInterval{start.Add(time.Duration(startDivider) * time.Millisecond).Format(layout),start.Add(time.Duration(endDivider) * time.Millisecond).Add(-1 * time.Millisecond).Format(layout),})}return
}/*** 根据年月获取,月份天数*/
func MonthDataCount(year int, month int) (days int) {if month != 2 {if month == 4 || month == 6 || month == 9 || month == 11 {days = 30} else {days = 31}} else {if ((year%4) == 0 && (year%100) != 0) || (year%400) == 0 {days = 29} else {days = 28}}return
}/*** 根据获取年天数*/
func YearDataCount(year int) (days int) {if ((year%4) == 0 && (year%100) != 0) || (year%400) == 0 {days = 366} else {days = 365}return
}

测试运行

func main() {fmt.Println("=====================按day平分====================")_, day := TimeDivide("day", 3, "")fmt.Println(day)fmt.Println("=====================按week平分===================")_, week := TimeDivide("week", 3, "")fmt.Println(week)fmt.Println("=====================按month平分===================")_, month := TimeDivide("month", 3, "", time.Now())fmt.Println(month)fmt.Println("=====================按year平分===================")_, year := TimeDivide("year", 3, "", time.Now())fmt.Println(year)
}
=====================按day平分====================
[{00:00 07:59} {08:00 15:59} {16:00 23:59}]
=====================按week平分===================
[{星期1-00:00 星期3-07:59} {星期3-08:00 星期5-15:59} {星期5-16:00 星期7-23:59}]
=====================按month平分===================
[{01号-00:00:00 11号-07:59:59} {11号-08:00:00 21号-15:59:59} {21号-16:00:00 31号-23:59:59}]
=====================按year平分===================
[{01月01日-00:00:00 05月02日-15:59:59} {05月02日-16:00:00 09月01日-07:59:59} {09月01日-08:00:00 12月31日-23:59:59}]

按天、周、月、年平分时间 Go 实现相关推荐

  1. PHP获取时间戳、获取天周月的起始时间、指定时间所在周、指定时间的各个周等相关函数

    目录 一.时间戳和日期互相转换 二.PHP获取今日.昨日.上周.本周.上月.本月的起始时间戳 三.获取当前周的每天的起始时间 四.获取周的起始时间 1.根据指定时间获取所在周的起始时间和结束时间 2. ...

  2. java获取一年的周数、单周开始时间与结束时间、一年所有周开始时间与结束时间、月开始时间与结束时间

    java获取一年的周数.单周开始时间与结束时间.一年所有周开始时间与结束时间.月开始时间与结束时间 package com.frgk.produce.util;import org.springfra ...

  3. Java:DateUtils 获取 本上下(周/月)周一周日 最后一天 当月多少天

    前言 使用日期函数,获取当月多少天,当前第几月,以及各种与时间有关系的操作: 这篇文章草稿是在19-5-30写好的,一直想完善,写个一网打尽的,奈何自己懒,一直没写完,时隔一年,写完吧,基本上可以处理 ...

  4. java8 日期范围内 日/周/月/季度/年 的日期结果集

    java8 日期范围内 日/周/月/季度/年 的日期结果集 /*** 根据时间范围列出所有日/周/月/季/年** @Author Moqi* @Date 2020/4/30* @Version V1. ...

  5. cron 每两周执行_如何每两周/月/天执行一次cron作业

    cron 每两周执行 We may want to run some jobs for every two weeks/months/days- under some situation such a ...

  6. php文章周月总排行榜怎么实现,帝国cms7.0实现日 周 月点击排行的方法

    本文将为您介绍的是帝国cms7.0实现日 周 月点击排行的方法,具体操作方法请看下文: 新增信息的排行不太符合我的要求.就自己琢磨了一套全站信息的月点击.周点击排行.需要新增几个字段及修改文件.下面开 ...

  7. 江苏省计算机一级三月份考试时间,江苏省3月计算机考试时间安排

    计算机对人类的生产活动和社会活动产生了极其重要的影响,并以强大的生命力飞速发展.下面是小编整理的2017年3月计算机考试时间安排最新消息,欢迎参考! 一.考试时间 江苏省计算机考试将于2017年3月2 ...

  8. Oracle按日周月分组统计,及next_day()函数详解

    1.概述 工作中遇到如下问题:统计周期内关键词数,而这里的周期内最常用的就是日周月. 日月比较容易处理,周的话可以通过next_day()函数实现. 2.实例问题 如下,有一张表ljb_test,包括 ...

  9. 安徽自考计算机基础考试时间,安徽2021年4月自考考试时间

    根据安徽省教育招生考试院公布的安徽2021年4月高等教育自学考试课程安排了解到,安徽2021年4月自考时间已公布,安徽自考安排在4月10日-4月11日期间举行,具体如下: 安徽2021年4月自考考试时 ...

最新文章

  1. 列出所有已安装的perl模块
  2. POJ-1122 FDNY to the Rescue!---Dijkstra+反向建图
  3. 【Linux】25.ubuntu使用 nethogs 监测网络流量情况
  4. android查看统计项目的方法数
  5. Centos系统设置
  6. html中div弹出显示
  7. 三星手機android6.01,三星SM-C7000固件刷机包6.01rom线刷包Root权限驱动
  8. 视频 Docker 学习(高级篇)
  9. 一定要记住这20种PS技术!来美化你的照片
  10. C# 对目录中的文件名按照数字序号进行排序
  11. Groundhog Looking Dowdy(尺取大法)
  12. android多个module打包aar,Android 多 Module 合并打包 AAR
  13. Everything研究之快速获取USN记录的文件路径
  14. 基于android物流快递服务系统app
  15. 最新Python 实现自动登录抖音(京东),实现滑块自动滑过
  16. 华为路由器可以连接几个设备_华为如何设置连接两个无线路由器
  17. som java_SOM网络聚类完整示例(利用python和java)
  18. 手持振弦传感器VH03读数仪测读仪频率仪地质灾害土木工程自动化监测
  19. 在 LaTeX 中创建文档
  20. anemometer mysql5.6_slowlog分析anemometer平台搭建

热门文章

  1. C# 如何实现热键注册 RegisterHotKey
  2. 华为交换机配置的导出和导入
  3. Android点击一次按钮,布局显示,第二次点击,布局消失;点一次出现,再点一次消失逻辑。
  4. oracle查询闪回点,oracle 闪回查询
  5. android 创建assetmanager文件,Android AssetManager
  6. AssetManager回顾
  7. discuz mysql密码_discuz 密码解密
  8. PostgreSQL学习总结(十七)——(客户端命令<一>)
  9. 计算机程序专利实用新型,程序类实用新型-如何处理涉及计算机程序的实用新型?...
  10. 华为Mate40国内版价格揭晓