时间段划分
时间:2021-08-10
本文章向大家介绍时间段划分,主要包括时间段划分使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
网上找过很多给一个时间段划分的功能,但是都感觉不是特别全也不是特别好用,索性自己根据网上的资料参考自己写了一个。
可以根据星期、月份、季度、年划分时间段(是严格按照起止时间划分的,例如:开始时间 2020-12-31 结束时间 2021-3-5,按月份划分就是 2020年12月份、2021年1月份、2021年2月份、2021年3月份;季度和年也是如此,后续可以根据自己需要改动代码)。
废话少说,直接上代码
public static class DateSplitHelper { #region 根据周期类型获取时间段分组 杨福良 2021-4-15 10:25:12 /// <summary> /// 根据周期类型获取时间段分组 /// </summary> /// <param name="startDate"></param> /// <param name="endDate"></param> /// <param name="caredCycle"></param> /// <returns></returns> public static Dictionary<string, string> GetDates(DateTime startDate, DateTime endDate, int caredCycle) { Dictionary<string, string> dates = new Dictionary<string, string>(); if (caredCycle == 0) { dates = DateSplitHelper.GetGroupWeek(startDate.ToShortDateString(), endDate.ToShortDateString()); return dates; } if (caredCycle == 1) { dates = DateSplitHelper.GetGroupMonth(startDate.ToShortDateString(), endDate.ToShortDateString()); return dates; } if (caredCycle == 2) { dates = DateSplitHelper.GetGroupSeason(startDate.ToShortDateString(), endDate.ToShortDateString()); return dates; } if (caredCycle == 3) { dates = DateSplitHelper.GetGroupYear(startDate.ToShortDateString(), endDate.ToShortDateString()); return dates; } return dates; } #endregion #region 根据时间范围获取每周分组 杨福良 2021-4-14 21:49:46 /// <summary> /// 根据时间范围获取每周分组 /// </summary> /// <param name="strStartDate">起始时间</param> /// <param name="strEndDate">结束时间</param> /// <returns>返回每周起始结束键值对</returns> static DateTime LastDayOfMonth(DateTime datetime) { return datetime.AddDays(1 - datetime.Day).AddMonths(1).AddDays(-1); } #endregion #region 获取当前季度 杨福良 2021-4-25 18:02:44 /// <summary> /// 获取当前季度 /// </summary> /// <param name="date"></param> /// <returns></returns> public static string GetMonthSeason(this string date) { DateTime dt = Convert.ToDateTime(date); int month = dt.Month; if (month <= 3) { return $"{dt.Year}年1季度"; } if (month <= 6 && month >= 4) { return $"{dt.Year}年2季度"; } if (month <= 9 && month >= 7) { return $"{dt.Year}年3季度"; } return $"{dt.Year}年4季度"; } #endregion /// <summary> /// 日期转换 /// </summary> /// <param name="date"></param> /// <param name="caredCycle">统计周期 0 按周 1 按月 2 按季度 3 按年</param> /// <returns></returns> public static string DateTransform(string startDate, string endDate, int caredCycle) { StringBuilder strSql = new StringBuilder(); if (caredCycle == 0) { strSql.Append($@" '{startDate}-{endDate}'AS AreaSection, "); } if (caredCycle == 1) { strSql.Append($@" '{Convert.ToDateTime(startDate).GetDateTimeFormats('y')[0].ToString()}'AS AreaSection,"); } if (caredCycle == 2) { strSql.Append($@" '{startDate.GetMonthSeason()}'AS AreaSection,"); } if (caredCycle == 3) { strSql.Append($@" '{Convert.ToDateTime(startDate).Year}年'AS AreaSection,"); } return strSql.ToString(); } static Dictionary<string, string> GetGroupWeek(string strStartDate, string strEndDate) { DateTime dtStartDate = DateTime.Parse(strStartDate); DateTime dtEndDate = DateTime.Parse(strEndDate); Dictionary<string, string> dict = new Dictionary<string, string>(); bool ok = true; while (ok) { DayOfWeek day = dtStartDate.DayOfWeek; string dayString = day.ToString(); DateTime dtTempStartDate = dtStartDate; DateTime dtTempDate = DateTime.Now; switch (dayString) { case "Monday": dtTempDate = dtTempStartDate.Date.AddDays(+6); break; case "Tuesday": dtTempDate = dtTempStartDate.Date.AddDays(+5); break; case "Wednesday": dtTempDate = dtTempStartDate.Date.AddDays(+4); break; case "Thursday": dtTempDate = dtTempStartDate.Date.AddDays(+3); break; case "Friday": dtTempDate = dtTempStartDate.Date.AddDays(+2); break; case "Saturday": dtTempDate = dtTempStartDate.Date.AddDays(+1); break; case "Sunday": dtTempDate = dtTempStartDate; break; } if (dtTempDate > dtEndDate) { dict.Add(dtTempStartDate.ToString(), dtEndDate.ToString()); ok = false; continue; } dict.Add(dtTempStartDate.ToString(), dtTempDate.ToString()); dtStartDate = dtTempDate.Date.AddDays(+1); if (dtStartDate > dtEndDate) { ok = false; } } return dict; } static Dictionary<string, string> GetGroupMonth(string strStartDate, string strEndDate) { DateTime dtStartDate = DateTime.Parse(strStartDate); DateTime dtEndDate = DateTime.Parse(strEndDate); Dictionary<string, string> dict = new Dictionary<string, string>(); bool ok = true; while (ok) { DateTime dtTempStartDate = dtStartDate; DateTime dtTempDate = LastDayOfMonth(dtStartDate); if (dtTempDate > dtEndDate) { dtTempDate = dtEndDate; ok = false; } dict.Add(dtTempStartDate.ToString(), dtTempDate.ToString()); dtStartDate = dtTempDate.Date.AddDays(+1); if (dtStartDate > dtEndDate) ok = false; //if (dtTempDate > dtEndDate) //{ // dict.Add(dtTempStartDate.ToString(), dtEndDate.ToString()); // ok = false; // continue; //} //dict.Add(dtTempStartDate.ToString(), dtTempDate.ToString()); //dtStartDate = dtTempDate.Date.AddDays(+1); } return dict; } static Dictionary<string, string> GetGroupSeason(string strStartDate, string strEndDate) { DateTime dtStartDate = DateTime.Parse(strStartDate); DateTime dtEndDate = DateTime.Parse(strEndDate); DateTime dtTempStartDate = dtStartDate; DateTime dtTempDate = DateTime.Now; Dictionary<string, string> dict = new Dictionary<string, string>(); bool ok = true; while (ok) { int currentMonth = dtStartDate.Month; int currentSeason = currentMonth / 3 + (currentMonth % 3 > 0 ? 1 : 0); dtTempDate = DateTime.Parse(DateTime.Parse(dtStartDate.Year + "." + (currentSeason * 3) + "." + "01").ToString("yyyy.MM.dd")); dtTempDate = LastDayOfMonth(dtTempDate); if (dtTempDate > dtEndDate) { dtTempDate = dtEndDate; ok = false; } dict.Add(dtTempStartDate.ToString(), dtTempDate.ToString()); dtStartDate = dtTempDate.Date.AddDays(+1); if (dtStartDate > dtEndDate) { dtTempDate = dtEndDate; ok = false; } dtTempStartDate = dtTempDate.Date.AddDays(+1); } return dict; } static Dictionary<string, string> GetGroupYear(string strStartDate, string strEndDate) { Dictionary<string, string> dict = new Dictionary<string, string>(); DateTime dtStartDate = DateTime.Parse(strStartDate); DateTime dtEndDate = DateTime.Parse(strEndDate); //同年 if (dtStartDate.Year == dtEndDate.Year) { dict.Add(dtStartDate.ToShortDateString(), new DateTime(dtStartDate.Year + 1, 1, 1).AddDays(-1).ToShortDateString()); return dict; } bool ok = true; while (ok) { DateTime dtTempStartDate = dtStartDate; DateTime dtTempDate = DateTime.Parse(DateTime.Parse(dtStartDate.Year + ".12." + "31").ToString("yyyy.MM.dd")); if (dtTempDate > dtEndDate) { dtTempDate = dtEndDate; ok = false; } dict.Add(dtTempStartDate.ToString(), dtTempDate.ToString()); dtStartDate = dtTempDate.Date.AddDays(+1); if (dtStartDate > dtEndDate) { dtTempDate = dtEndDate; ok = false; } } return dict; } }
大家有疑问的地方可以随时沟通,非常乐意哦~~~
原文地址:https://www.cnblogs.com/LittleCuteFive/p/15123024.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法