原文地址声明: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. 网易严选 x 网易有数:数据产品+数据中台双引擎模式实践
  2. 穿梭框的list集合 去重
  3. PyTorch常用代码段整理合集
  4. 减肥瘦不下来的原因找到了
  5. mysql视图表怎么设置约束_MySQL一一sql的视图、索引、约束
  6. 04737 c++ 自学考试2019版 第二章课后程序设计题 2
  7. linux 自动安装mysql数据库_linux系统下源码安装mysql5.6数据库
  8. ppt中的流程图怎么整体移动_PPT中图片太丑了?该怎么办?
  9. JAVA六大线程池详解
  10. 什么是浏览器同源策略?
  11. antd 日期时间选择_【UI设计】日期选择器的常见样式总结
  12. [转]一个计算机专业学生几年的编程经验汇总
  13. Python IDE: 10个最好用的python集成开发环境(IDE)
  14. R语言非参数检验(一)
  15. 恩山斐讯论坛k2p_K2P A1 A2 路由器刷机教程 最详细教程,适合新手!
  16. java 菱形继承_菱形继承与菱形虚拟继承
  17. Spring Cloud项目是如何读取bootstrap.properties文件的?
  18. 先验概率和后验概率那点事儿
  19. CentOS 之 libc-dev 安装
  20. MAC电脑 安全与隐私 中没有任何来源选项怎么办

热门文章

  1. VisualVM的使用
  2. e6r.top app.html,zhuoyao_radar/index_widesearch.html at master · keunsy/zhuoyao_radar · GitHub
  3. css3有趣的transform形变
  4. 沟通的艺术III:看人之间 之倾听
  5. 数据挖掘之Web挖掘和文本挖掘
  6. python使用turtle库画出大写的字母z_Python绘图turtle库
  7. unity 黑魂 开发日志3
  8. 机器学习之路--Matplotlib
  9. 华为存储iscsi配置_安装与配置Windows平台iSCSI存储环境
  10. Ubuntu关机与重启