TimeHelper.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. using System;
  2. using System.Collections.Generic;
  3. using TEAMModelBI.Models;
  4. namespace TEAMModelBI.Tool
  5. {
  6. public static class TimeHelper
  7. {
  8. /// <summary>
  9. /// 获取月份的开始和结束时间戳 10位
  10. /// </summary>
  11. /// <param name="year"></param>
  12. /// <param name="month"></param>
  13. /// <returns></returns>
  14. public static (long start, long end) GetMonthStartEnd10(int year, int month)
  15. {
  16. DateTime dt = DateTime.Parse($"{year}-{month}");
  17. DateTime dtNew = new DateTime(dt.Year, dt.Month, 1);
  18. long start = DateTimeOffset.Parse($"{dtNew}").ToUnixTimeSeconds();
  19. var ste = dtNew.AddMonths(1).AddDays(-1).Day;
  20. long end = DateTimeOffset.Parse($"{dt.Year}-{dt.Month}-{ste} 23:59:59").ToUnixTimeSeconds();
  21. return (start, end);
  22. }
  23. /// <summary>
  24. /// 获取月份的开始和结束时间戳 13位
  25. /// </summary>
  26. /// <param name="year"></param>
  27. /// <param name="month"></param>
  28. /// <returns></returns>
  29. public static (long start, long end) GetMonthStartEnd13(int year, int month)
  30. {
  31. DateTime dt = DateTime.Parse($"{year}-{month}");
  32. DateTime dtNew = new DateTime(dt.Year, dt.Month, 1);
  33. long start = DateTimeOffset.Parse($"{dtNew}").ToUnixTimeMilliseconds();
  34. var ste = dtNew.AddMonths(1).AddDays(-1).Day;
  35. long end = DateTimeOffset.Parse($"{dt.Year}-{dt.Month}-{ste} 23:59:59").ToUnixTimeMilliseconds();
  36. return (start, end);
  37. }
  38. /// <summary>
  39. /// 获取今年12个月的月份开始和结束时间戳 10位
  40. /// </summary>
  41. /// <param name="year"></param>
  42. /// <returns></returns>
  43. public static List<MonthStartEnd> GetYearMonthlyStartEnd10(int year)
  44. {
  45. List<MonthStartEnd> monthStartEnds = new List<MonthStartEnd>();
  46. for (int i = 1; i <= 12; i++)
  47. {
  48. MonthStartEnd monthStartEnd = new MonthStartEnd() { yearMonth = $"{year}-{i}" };
  49. DateTime dt = DateTime.Parse($"{year}-{i}");
  50. DateTime dtNew = new DateTime(dt.Year, dt.Month, 1);
  51. long start = DateTimeOffset.Parse($"{dtNew}").ToUnixTimeSeconds();
  52. monthStartEnd.start = start;
  53. var ste = dtNew.AddMonths(1).AddDays(-1).Day;
  54. long end = DateTimeOffset.Parse($"{dt.Year}-{dt.Month}-{ste} 23:59:59").ToUnixTimeSeconds();
  55. monthStartEnd.end = end;
  56. monthStartEnds.Add(monthStartEnd);
  57. }
  58. return monthStartEnds;
  59. }
  60. /// <summary>
  61. /// 获取今年12个月的月份开始和结束时间戳 13位
  62. /// </summary>
  63. /// <param name="year"></param>
  64. /// <returns></returns>
  65. public static List<MonthStartEnd> GetYearMonthlyStartEnd13(int year)
  66. {
  67. List<MonthStartEnd> monthStartEnds = new List<MonthStartEnd>();
  68. for (int i = 1; i <= 12; i++)
  69. {
  70. MonthStartEnd monthStartEnd = new MonthStartEnd() { yearMonth = $"{year}-{i}" };
  71. DateTime dt = DateTime.Parse($"{year}-{i}");
  72. DateTime dtNew = new DateTime(dt.Year, dt.Month, 1);
  73. long start = DateTimeOffset.Parse($"{dtNew}").ToUnixTimeMilliseconds();
  74. monthStartEnd.start = start;
  75. var ste = dtNew.AddMonths(1).AddDays(-1).Day;
  76. long end = DateTimeOffset.Parse($"{dt.Year}-{dt.Month}-{ste} 23:59:59").ToUnixTimeMilliseconds();
  77. monthStartEnd.end = end;
  78. monthStartEnds.Add(monthStartEnd);
  79. }
  80. return monthStartEnds;
  81. }
  82. /// <summary>
  83. /// 获取过去12个月的每月开始和结束的时间戳
  84. /// </summary>
  85. /// <param name="yearMonth">日期</param>
  86. /// <param name="dateLenth">true :13位时间戳 false:10位时间戳</param>
  87. /// <returns></returns>
  88. public static List<MonthStartEnd> monthsOfYear(string yearMonth, bool dateLenth = true)
  89. {
  90. List<MonthStartEnd> monthStartEnds = new List<MonthStartEnd>();
  91. DateTime dateTime = DateTime.Parse(yearMonth);
  92. int year = dateTime.Year;
  93. int month = dateTime.Month;
  94. List<string> months = new List<string>();
  95. while (year > dateTime.Year - 1 || month > dateTime.Month)
  96. {
  97. MonthStartEnd monthStartEnd = new MonthStartEnd() { yearMonth = $"{year}-{month}" };
  98. DateTime dtNew = new DateTime(year, month, 1);
  99. long start = dateLenth ? DateTimeOffset.Parse($"{dtNew}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{dtNew}").ToUnixTimeSeconds();
  100. monthStartEnd.start = start;
  101. var ste = dtNew.AddMonths(1).AddDays(-1).Day;
  102. long end = dateLenth ? DateTimeOffset.Parse($"{dateTime.Year}-{dateTime.Month}-{ste} 23:59:59").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{dateTime.Year}-{dateTime.Month}-{ste} 23:59:59").ToUnixTimeSeconds();
  103. monthStartEnd.end = end;
  104. monthStartEnds.Add(monthStartEnd);
  105. months.Add($"{year}-{(month < 10 ? "0" : "") + month}");
  106. month -= 1;
  107. if (month <= 0)
  108. {
  109. year -= 1;
  110. month = 12;
  111. }
  112. }
  113. return monthStartEnds;
  114. }
  115. /// <summary>
  116. /// 获取传过来的时间学期的开始时间戳和结束时间
  117. /// </summary>
  118. /// <param name="dateTime">日期</param>
  119. /// <param name="dateLenth">true :13位时间戳 false:10位时间戳 </param>
  120. /// <returns></returns>
  121. public static (long start, long end) GetTermStartOrEnd(DateTime dateTime, bool dateLenth = true)
  122. {
  123. long start = 0;
  124. long end = 0;
  125. //DateTime dateTime = tempDateTime;
  126. int year = dateTime.Year;
  127. int month = dateTime.Month;
  128. if (month <= 8 && month >= 3)
  129. {
  130. DateTime newStart = new DateTime(year, 3, 1);
  131. start = dateLenth ? DateTimeOffset.Parse($"{newStart}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{newStart}").ToUnixTimeSeconds();
  132. DateTime newEnd = new DateTime(year, 8, 31, 23, 59, 59);
  133. end = dateLenth ? DateTimeOffset.Parse($"{newEnd}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{newEnd}").ToUnixTimeSeconds();
  134. }
  135. else
  136. {
  137. //计算当前月份
  138. int days = 0;
  139. if (month >= 9)
  140. {
  141. DateTime newStart = new DateTime(dateTime.Year, 9, 1);
  142. start = dateLenth ? DateTimeOffset.Parse($"{newStart}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{newStart}").ToUnixTimeSeconds();
  143. DateTime newEnd = new DateTime(dateTime.Year + 1, 2, (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? days = 29 : days = 28, 23, 59, 59);
  144. end = dateLenth ? DateTimeOffset.Parse($"{newEnd}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{newEnd}").ToUnixTimeSeconds();
  145. }
  146. else
  147. {
  148. DateTime newStart = new DateTime(dateTime.Year - 1, 9, 1);
  149. start = dateLenth ? DateTimeOffset.Parse($"{newStart}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{newStart}").ToUnixTimeSeconds();
  150. DateTime newEnd = new DateTime(dateTime.Year, 2, (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? days = 29 : days = 28, 23, 59, 59);
  151. end = dateLenth ? DateTimeOffset.Parse($"{newEnd}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{newEnd}").ToUnixTimeSeconds();
  152. }
  153. }
  154. return (start, end);
  155. }
  156. /// <summary>
  157. /// 开始时间和结束时间戳
  158. /// </summary>
  159. /// <param name="dateTime"></param>
  160. /// <param name="type"></param>
  161. /// <param name="dateLenth"></param>
  162. /// <returns></returns>
  163. public static (long start, long end) GetStartOrEnd(DateTimeOffset dateTime, string type = "", bool dateLenth = true)
  164. {
  165. long start = 0;
  166. long end = 0;
  167. DateTimeOffset tempStrart = new();
  168. DateTimeOffset tempEnt = new();
  169. switch (type)
  170. {
  171. case "year":
  172. tempStrart = new DateTime(dateTime.Year,1, 1);
  173. tempEnt = new DateTime(dateTime.Year, 12, DateTime.DaysInMonth(dateTime.Year, 12), 23, 59, 59);
  174. break;
  175. case "term":
  176. int year = dateTime.Year;
  177. int month = dateTime.Month;
  178. if (month <= 8 && month >= 3)
  179. {
  180. tempStrart = new DateTime(year, 3, 1);
  181. tempEnt = new DateTime(year, 8, 31, 23, 59, 59);
  182. }
  183. else
  184. {
  185. //计算当前月份
  186. int days = 0;
  187. if (month >= 9)
  188. {
  189. tempStrart = new DateTime(dateTime.Year, 9, 1);
  190. tempEnt = new DateTime(dateTime.Year + 1, 2, (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? days = 29 : days = 28, 23, 59, 59); }
  191. else
  192. {
  193. tempStrart = new DateTime(dateTime.Year - 1, 9, 1);
  194. tempEnt = new DateTime(dateTime.Year, 2, (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? days = 29 : days = 28, 23, 59, 59);
  195. }
  196. }
  197. break;
  198. case "month":
  199. tempStrart = new DateTime(dateTime.Year, dateTime.Month, 1);
  200. tempEnt = new DateTime(dateTime.Year, dateTime.Month, DateTime.DaysInMonth(dateTime.Year, dateTime.Month), 23, 59, 59);
  201. break;
  202. case "week":
  203. DateTimeOffset weekStrart = dateTime.AddDays(-(int)(dateTime.DayOfWeek) + 1);
  204. DateTimeOffset weekEnd = dateTime.AddDays(7-(int)(dateTime.DayOfWeek));
  205. tempStrart = new DateTime(weekStrart.Year, weekStrart.Month, weekStrart.Day);
  206. tempEnt = new DateTime(weekEnd.Year, weekEnd.Month, weekEnd.Day, 23, 59, 59);
  207. break;
  208. default:
  209. tempStrart = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day);
  210. tempEnt = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, 23, 59, 59);
  211. //start = dateLenth ? DateTimeOffset.Parse($"{dayStart}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{dayStart}").ToUnixTimeSeconds();
  212. //end = dateLenth ? DateTimeOffset.Parse($"{dayEnd}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{dayEnd}").ToUnixTimeSeconds();
  213. break;
  214. }
  215. start = dateLenth ? DateTimeOffset.Parse($"{tempStrart}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{tempStrart}").ToUnixTimeSeconds();
  216. end = dateLenth ? DateTimeOffset.Parse($"{tempEnt}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{tempEnt}").ToUnixTimeSeconds();
  217. return (start, end);
  218. }
  219. }
  220. }