TimeHelper.cs 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542
  1. using DocumentFormat.OpenXml.Bibliography;
  2. using Microsoft.Azure.Amqp.Framing;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using TEAMModelOS.SDK.Models.Cosmos.BI;
  9. namespace TEAMModelOS.SDK.Models.Service.BI
  10. {
  11. public static class TimeHelper
  12. {
  13. /// <summary>
  14. /// 平年
  15. /// </summary>
  16. public static List<int> flatY = new() { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
  17. /// <summary>
  18. /// 闰年
  19. /// </summary>
  20. public static List<int> leapY = new() { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
  21. /// <summary>
  22. /// 通过时间戳转换为时间
  23. /// </summary>
  24. /// <param name="timeStamp"></param>
  25. /// <returns></returns>
  26. public static DateTimeOffset GetDateTime(long timeStamp)
  27. {
  28. long begtime = timeStamp * 10000;
  29. DateTimeOffset dt_1970 = new(1970, 1, 1, 0, 0, 0, TimeSpan.Zero);
  30. long tricks_1970 = dt_1970.Ticks;//1970年1月1日刻度
  31. long time_tricks = tricks_1970 + begtime;//日志日期刻度
  32. DateTimeOffset dt = new DateTime(time_tricks);//转化为DateTime
  33. return dt;
  34. }
  35. /// <summary>
  36. /// 通过string装换为时间并获取时间的年、月、日、一年第几天、小时
  37. /// </summary>
  38. /// <param name="time">时间,例如:2022060706</param>
  39. /// <param name="timeStrType">时间类型: 例如:yyyyMMddHH </param>
  40. /// <returns></returns>
  41. public static (int year, int month, int day, int days, int hour) GetDateTime(string time, string timeStrType = null)
  42. {
  43. string type = "yyyyMMddHH";
  44. if (!string.IsNullOrEmpty(timeStrType))
  45. {
  46. type = timeStrType;
  47. }
  48. int year = 0, month = 0, day = 0, days = 0, hour = 0;
  49. DateTimeOffset dateTime = new();
  50. dateTime = DateTime.ParseExact(time, type, System.Globalization.CultureInfo.CurrentCulture);
  51. year = dateTime.Year;
  52. month = dateTime.Month;
  53. day = dateTime.Day;
  54. DateTimeOffset dt1 = new DateTime(year, 1, 1);
  55. days = (dateTime.Date - dt1.Date).Days + 1;
  56. hour = dateTime.Hour;
  57. return (year, month, day, days, hour);
  58. }
  59. /// <summary>
  60. /// 获取月份的开始和结束时间戳 13位
  61. /// </summary>
  62. /// <param name="year"></param>
  63. /// <param name="month"></param>
  64. /// <returns></returns>
  65. public static (long start, long end) GetMonthStartEnd(int year, int month, bool dateLenth = true)
  66. {
  67. DateTimeOffset dtNew = new(year, month, 1, 0, 0, 0, TimeSpan.Zero);
  68. long start = DateTimeOffset.Parse($"{dtNew}").ToUnixTimeMilliseconds();
  69. if (dateLenth == false) start = DateTimeOffset.Parse($"{dtNew}").ToUnixTimeSeconds();
  70. var ste = dtNew.AddMonths(1).AddDays(-1).Day;
  71. long end = new DateTimeOffset(dtNew.Year, dtNew.Month, ste, 23, 59, 59, TimeSpan.Zero).ToUnixTimeMilliseconds();
  72. // DateTimeOffset.Parse($"{dt.Year}-{dt.Month}-{ste} 23:59:59").ToUnixTimeMilliseconds();
  73. if (dateLenth == false) end = new DateTimeOffset(dtNew.Year, dtNew.Month, dtNew.Day, 23, 59, 59, TimeSpan.Zero).ToUnixTimeSeconds();
  74. //DateTimeOffset.Parse($"{dt.Year}-{dt.Month}-{ste} 23:59:59").ToUnixTimeSeconds();
  75. return (start, end);
  76. }
  77. /// <summary>
  78. /// 通过时间获取当前年开始月份到现在月的开始时间到结束时间 现在月是当前天的结束时间
  79. /// </summary>
  80. /// <param name="date"></param>
  81. /// <param name="dateLenth"></param>
  82. /// <returns></returns>
  83. public static async Task<List<StartEndTime>> GetYearSataMthCtMth(DateTimeOffset date, bool dateLenth = true)
  84. {
  85. int year = date.Year;
  86. int mth = date.Month;
  87. int day = date.Day;
  88. List<StartEndTime> monthStartEnds = new();
  89. for (int i = 1; i <= mth; i++)
  90. {
  91. StartEndTime monthStartEnd = new() { date = $"{year}-{i}" };
  92. //DateTime dt = DateTime.Parse($"{year}-{i}");
  93. DateTimeOffset dtNew = new(year, i, 1, 0, 0, 0, TimeSpan.Zero);
  94. long start = dtNew.ToUnixTimeMilliseconds();
  95. if (dateLenth == false)
  96. start = DateTimeOffset.Parse($"{dtNew}").ToUnixTimeSeconds();
  97. monthStartEnd.start = start;
  98. long end = 0;
  99. if (i == mth)
  100. {
  101. end = DateTimeOffset.Parse($"{year}-{mth}-{day} 23:59:59").ToUnixTimeMilliseconds();
  102. if (dateLenth == false)
  103. end = DateTimeOffset.Parse($"{year}-{mth}-{day} 23:59:59").ToUnixTimeSeconds();
  104. }
  105. else
  106. {
  107. var ste = dtNew.AddMonths(1).AddDays(-1).Day;
  108. end = DateTimeOffset.Parse($"{dtNew.Year}-{dtNew.Month}-{ste} 23:59:59").ToUnixTimeMilliseconds();
  109. if (dateLenth == false)
  110. end = DateTimeOffset.Parse($"{dtNew.Year}-{dtNew.Month}-{ste} 23:59:59").ToUnixTimeSeconds();
  111. }
  112. monthStartEnd.end = end;
  113. monthStartEnds.Add(monthStartEnd);
  114. }
  115. return monthStartEnds;
  116. }
  117. /// <summary>
  118. /// 获取今年12个月的月份开始和结束时间戳 13位 10位
  119. /// </summary>
  120. /// <param name="year">年份</param>
  121. /// <param name="dateLenth">true :13位时间戳 false:10位时间戳</param>
  122. /// <returns></returns>
  123. public static List<StartEndTime> GetYearMonthlyStartEnd(int year, bool dateLenth = true)
  124. {
  125. List<StartEndTime> monthStartEnds = new();
  126. for (int i = 1; i <= 12; i++)
  127. {
  128. StartEndTime monthStartEnd = new() { date = $"{year}-{i}" };
  129. //DateTime dt = DateTime.Parse($"{year}-{i}");
  130. DateTimeOffset dtNew = new(year, i, 1, 0, 0, 0, TimeSpan.Zero);
  131. long start = dtNew.ToUnixTimeMilliseconds();
  132. if (dateLenth == false)
  133. start = dtNew.ToUnixTimeSeconds();
  134. monthStartEnd.start = start;
  135. var ste = dtNew.AddMonths(1).AddDays(-1).Day;
  136. long end = DateTimeOffset.Parse($"{dtNew.Year}-{dtNew.Month}-{ste} 23:59:59").ToUnixTimeMilliseconds();
  137. if (dateLenth == false)
  138. end = DateTimeOffset.Parse($"{dtNew.Year}-{dtNew.Month}-{ste} 23:59:59").ToUnixTimeSeconds();
  139. monthStartEnd.end = end;
  140. monthStartEnds.Add(monthStartEnd);
  141. }
  142. return monthStartEnds;
  143. }
  144. /// <summary>
  145. /// 获取过去12个月的每月开始和结束的时间戳
  146. /// </summary>
  147. /// <param name="yearMonth">日期</param>
  148. /// <param name="dateLenth">true :13位时间戳 false:10位时间戳</param>
  149. /// <returns></returns>
  150. public static List<StartEndTime> monthsOfYear(string yearMonth, bool dateLenth = true)
  151. {
  152. List<StartEndTime> monthStartEnds = new();
  153. DateTime dateTime = DateTime.Parse(yearMonth);
  154. int year = dateTime.Year;
  155. int month = dateTime.Month;
  156. List<string> months = new();
  157. while (year > dateTime.Year - 1 || month > dateTime.Month)
  158. {
  159. StartEndTime monthStartEnd = new() { date = $"{year}-{month}" };
  160. DateTimeOffset dtNew = new(year, month, 1, 0, 0, 0, TimeSpan.Zero);
  161. long start = dateLenth ? dtNew.ToUnixTimeMilliseconds() : dtNew.ToUnixTimeSeconds();
  162. monthStartEnd.start = start;
  163. var ste = dtNew.AddMonths(1).AddDays(-1).Day;
  164. 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();
  165. monthStartEnd.end = end;
  166. monthStartEnds.Add(monthStartEnd);
  167. months.Add($"{year}-{(month < 10 ? "0" : "") + month}");
  168. month -= 1;
  169. if (month <= 0)
  170. {
  171. year -= 1;
  172. month = 12;
  173. }
  174. }
  175. return monthStartEnds;
  176. }
  177. /// <summary>
  178. /// 获取传过来的时间学期的开始时间戳和结束时间
  179. /// </summary>
  180. /// <param name="dateTime">日期</param>
  181. /// <param name="dateLenth">true :13位时间戳 false:10位时间戳 </param>
  182. /// <returns></returns>
  183. public static (long start, long end) GetTermStartOrEnd(DateTimeOffset dateTime, bool dateLenth = true)
  184. {
  185. long start = 0;
  186. long end = 0;
  187. //DateTime dateTime = tempDateTime;
  188. int year = dateTime.Year;
  189. int month = dateTime.Month;
  190. if (month <= 8 && month >= 3)
  191. {
  192. DateTimeOffset newStart = new(year, 3, 1, 0, 0, 0, TimeSpan.Zero);
  193. start = dateLenth ? DateTimeOffset.Parse($"{newStart}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{newStart}").ToUnixTimeSeconds();
  194. DateTimeOffset newEnd = new(year, 8, 31, 23, 59, 59, TimeSpan.Zero);
  195. end = dateLenth ? DateTimeOffset.Parse($"{newEnd}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{newEnd}").ToUnixTimeSeconds();
  196. }
  197. else
  198. {
  199. //计算当前月份
  200. int days = 0;
  201. if (month >= 9)
  202. {
  203. DateTimeOffset newStart = new(dateTime.Year, 9, 1, 0, 0, 0, TimeSpan.Zero);
  204. start = dateLenth ? newStart.ToUnixTimeMilliseconds() : newStart.ToUnixTimeSeconds();
  205. DateTimeOffset newEnd = new(dateTime.Year + 1, 2, (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? days = 29 : days = 28, 23, 59, 59, TimeSpan.Zero);
  206. end = dateLenth ? newEnd.ToUnixTimeMilliseconds() : newEnd.ToUnixTimeSeconds();
  207. }
  208. else
  209. {
  210. DateTimeOffset newStart = new(dateTime.Year - 1, 9, 1, 0, 0, 0, TimeSpan.Zero);
  211. start = dateLenth ? newStart.ToUnixTimeMilliseconds() : newStart.ToUnixTimeSeconds();
  212. DateTimeOffset newEnd = new(dateTime.Year, 2, (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? days = 29 : days = 28, 23, 59, 59, TimeSpan.Zero);
  213. end = dateLenth ? newEnd.ToUnixTimeMilliseconds() : newEnd.ToUnixTimeSeconds();
  214. }
  215. }
  216. return (start, end);
  217. }
  218. /// <summary>
  219. /// 开始时间和结束时间戳
  220. /// </summary>
  221. /// <param name="dateTime"></param>
  222. /// <param name="type"></param>
  223. /// <param name="dateLenth"></param>
  224. /// <returns></returns>
  225. public static (long start, long end) GetStartOrEnd(DateTimeOffset dateTime, string type = "", bool dateLenth = true)
  226. {
  227. try
  228. {
  229. long start = 0;
  230. long end = 0;
  231. int year = dateTime.Year;
  232. int month = dateTime.Month;
  233. int day = dateTime.Day;
  234. int hour = dateTime.Hour;
  235. DateTimeOffset tempStrart = new();
  236. DateTimeOffset tempEnd = new();
  237. switch (type)
  238. {
  239. //今年开始、结束
  240. case "yearMonth":
  241. tempStrart = new DateTimeOffset(year, 1, 1, 0, 0, 0, TimeSpan.Zero);
  242. tempEnd = new DateTimeOffset(year, month, DateTime.DaysInMonth(year, month), 23, 59, 59, TimeSpan.Zero);
  243. break;
  244. //今年开始、结束
  245. case "year":
  246. tempStrart = new DateTimeOffset(year, 1, 1, 0, 0, 0, TimeSpan.Zero);
  247. tempEnd = new DateTimeOffset(year, 12, DateTime.DaysInMonth(year, 12), 23, 59, 59, TimeSpan.Zero);
  248. break;
  249. //去年开始、结束
  250. case "lastYear":
  251. tempStrart = new DateTimeOffset(year - 1, 1, 1, 0, 0, 0, TimeSpan.Zero);
  252. tempEnd = new DateTimeOffset(year - 1, 12, DateTime.DaysInMonth(year, 12), 23, 59, 59, TimeSpan.Zero);
  253. break;
  254. //本学期
  255. case "term":
  256. if (month <= 8 && month >= 3)
  257. {
  258. tempStrart = new DateTimeOffset(year, 3, 1, 0, 0, 0, TimeSpan.Zero);
  259. tempEnd = new DateTimeOffset(year, 8, 31, 23, 59, 59, TimeSpan.Zero);
  260. }
  261. else
  262. {
  263. //计算当前月份
  264. int days = 0;
  265. if (month >= 9)
  266. {
  267. tempStrart = new DateTimeOffset(year, 9, 1, 0, 0, 0, TimeSpan.Zero);
  268. tempEnd = new DateTimeOffset(year + 1, 2, (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? days = 29 : days = 28, 23, 59, 59, TimeSpan.Zero);
  269. }
  270. else
  271. {
  272. tempStrart = new DateTimeOffset(year - 1, 9, 1, 0, 0, 0, TimeSpan.Zero);
  273. tempEnd = new DateTimeOffset(year, 2, (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? days = 29 : days = 28, 23, 59, 59, TimeSpan.Zero);
  274. }
  275. }
  276. break;
  277. //上学期
  278. case "lastterm":
  279. DateTimeOffset tempDate = new();
  280. if (dateTime.Month > 9)
  281. tempDate = new DateTimeOffset(year, dateTime.Month - 4, 1, 0, 0, 0, TimeSpan.Zero);
  282. else tempDate = new DateTimeOffset(year - 1, 9, 1, 0, 0, 0, TimeSpan.Zero);
  283. if (!string.IsNullOrEmpty($"{tempDate}"))
  284. {
  285. year = tempDate.Year;
  286. month = tempDate.Month;
  287. if (month <= 8 && month >= 3)
  288. {
  289. tempStrart = new DateTimeOffset(year, 3, 1, 0, 0, 0, TimeSpan.Zero);
  290. tempEnd = new DateTimeOffset(year, 8, 31, 23, 59, 59, TimeSpan.Zero);
  291. }
  292. else
  293. {
  294. //计算当前月份
  295. int days = 0;
  296. if (month >= 9)
  297. {
  298. tempStrart = new DateTimeOffset(year, 9, 1, 0, 0, 0, TimeSpan.Zero);
  299. tempEnd = new DateTimeOffset(year + 1, 2, (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? days = 29 : days = 28, 23, 59, 59, TimeSpan.Zero);
  300. }
  301. else
  302. {
  303. tempStrart = new DateTimeOffset(year - 1, 9, 1, 0, 0, 0, TimeSpan.Zero);
  304. tempEnd = new DateTimeOffset(year, 2, (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? days = 29 : days = 28, 23, 59, 59, TimeSpan.Zero);
  305. }
  306. }
  307. }
  308. break;
  309. //上个月
  310. case "lastMonth":
  311. tempStrart = new DateTimeOffset(year, month - 1, 1, 0, 0, 0, TimeSpan.Zero);
  312. tempEnd = new DateTimeOffset(year, month - 1, DateTime.DaysInMonth(year, month - 1), 23, 59, 59, TimeSpan.Zero);
  313. break;
  314. //本月1号至当天
  315. case "monthDay":
  316. tempStrart = new DateTimeOffset(year, month, 1, 0, 0, 0, TimeSpan.Zero);
  317. tempEnd = new DateTimeOffset(year, month, day, 23, 59, 59, TimeSpan.Zero);
  318. break;
  319. //本月
  320. case "month":
  321. tempStrart = new DateTimeOffset(year, month, 1, 0, 0, 0, TimeSpan.Zero);
  322. tempEnd = new DateTimeOffset(year, month, DateTime.DaysInMonth(year, month), 23, 59, 59, TimeSpan.Zero);
  323. break;
  324. //上周
  325. case "week":
  326. DateTimeOffset weekStrart = dateTime.AddDays(-(int)(dateTime.DayOfWeek) + 1);
  327. DateTimeOffset weekEnd = dateTime.AddDays(7 - (int)(dateTime.DayOfWeek));
  328. tempStrart = new DateTimeOffset(weekStrart.Year, weekStrart.Month, weekStrart.Day, 0, 0, 0, TimeSpan.Zero);
  329. tempEnd = new DateTimeOffset(weekEnd.Year, weekEnd.Month, weekEnd.Day, 23, 59, 59, TimeSpan.Zero);
  330. break;
  331. //上周
  332. case "lastweek":
  333. var m = (dateTime.DayOfWeek == DayOfWeek.Sunday ? (DayOfWeek)7 : dateTime.DayOfWeek) - DayOfWeek.Monday;
  334. var s = (dateTime.DayOfWeek == DayOfWeek.Sunday ? (DayOfWeek)7 : dateTime.DayOfWeek) - (DayOfWeek)7;
  335. var Mon = dateTime.AddDays((-7 - m));//星期一
  336. var Sun = dateTime.AddDays((-7 - s)); //星期日
  337. tempStrart = new DateTimeOffset(Mon.Year, Mon.Month, Mon.Day, 0, 0, 0, TimeSpan.Zero);
  338. tempEnd = new DateTimeOffset(Sun.Year, Sun.Month, Sun.Day, 23, 59, 59, TimeSpan.Zero);
  339. break;
  340. //当前小时
  341. case "hour":
  342. tempStrart = new DateTimeOffset(year, month, day, hour, 0, 0, TimeSpan.Zero);
  343. tempEnd = new DateTimeOffset(year, month, day, hour, 59, 59, TimeSpan.Zero);
  344. break;
  345. //当天
  346. default:
  347. tempStrart = new DateTimeOffset(year, month, day, 0, 0, 0, TimeSpan.Zero);
  348. tempEnd = new DateTimeOffset(year, month, day, 23, 59, 59, TimeSpan.Zero);
  349. //start = dateLenth ? DateTimeOffset.Parse($"{dayStart}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{dayStart}").ToUnixTimeSeconds();
  350. //end = dateLenth ? DateTimeOffset.Parse($"{dayEnd}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{dayEnd}").ToUnixTimeSeconds();
  351. break;
  352. }
  353. start = dateLenth ? tempStrart.ToUnixTimeMilliseconds() : tempStrart.ToUnixTimeSeconds();
  354. end = dateLenth ? tempEnd.ToUnixTimeMilliseconds() : tempEnd.ToUnixTimeSeconds();
  355. return (start, end);
  356. }
  357. catch (Exception ex)
  358. {
  359. throw;
  360. }
  361. }
  362. /// <summary>
  363. /// 计算每年获取开始时间
  364. /// </summary>
  365. /// <param name="dateTime"></param>
  366. /// <param name="dateLenth"></param>
  367. /// <returns></returns>
  368. public static List<StartEndTime> GetYearEveryDay(DateTimeOffset dateTime, bool dateLenth = true,bool isCurrDay = false)
  369. {
  370. List<StartEndTime> dayStartEen = new();
  371. int year = dateTime.Year;
  372. int curry = dateTime.DayOfYear;
  373. List<int> isLeapYear = (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? isLeapYear = leapY : isLeapYear = flatY;
  374. for (int m = 1; m <= 12; m++)
  375. {
  376. for (int d = 1; d <= isLeapYear[m - 1]; d++)
  377. {
  378. if (isCurrDay == true && (curry <= dayStartEen.Count))
  379. break;
  380. DateTimeOffset tempStrart = new(year, m, d, 0, 0, 0, TimeSpan.Zero);
  381. DateTimeOffset tempEnd = new(year, m, d, 23, 59, 59, TimeSpan.Zero);
  382. long longStart = dateLenth ? tempStrart.ToUnixTimeMilliseconds() : tempStrart.ToUnixTimeSeconds();
  383. long longEnd = dateLenth ? tempEnd.ToUnixTimeMilliseconds() : tempEnd.ToUnixTimeSeconds();
  384. dayStartEen.Add(new StartEndTime() { date = $"{year}-{m}-{d}", start = longStart, end = longEnd });
  385. }
  386. ////DateTime 有方法
  387. //DateTime monthStart = new DateTime(year, i, 01);
  388. //DateTime monthEnd = dateTime.AddMonths(1);
  389. //DateTimeOffset tempStrart = new DateTimeOffset(year, i, days, 0, 0, 0, TimeSpan.Zero);
  390. //DateTimeOffset tempEnd = new DateTimeOffset(year, i, days, 23, 59, 59, TimeSpan.Zero);
  391. }
  392. return dayStartEen;
  393. }
  394. /// <summary>
  395. /// 将时间戳格式 转换成string类型
  396. /// 例:yyyyMMdd,等string类型
  397. /// </summary>
  398. /// <param name="unixTime"></param>
  399. /// <returns></returns>
  400. public static (string timeStart, string timeEnd) GetUnixToDate(long start, long end = 0, string types = "yyyyMMdd")
  401. {
  402. string tStart = "";
  403. string tEnd = "";
  404. DateTimeOffset time = System.TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1, 0, 0, 0, 0));
  405. tStart = time.AddMilliseconds(start).ToString($"{types}");
  406. if (end > 0)
  407. {
  408. tEnd = time.AddMilliseconds(end).ToString($"{types}");
  409. }
  410. return (tStart, tEnd);
  411. }
  412. /// <summary>
  413. /// 获取每天的时间
  414. /// </summary>
  415. /// <param name="dateTime">时间</param>
  416. /// <param name="dayNumber">最近几天</param>
  417. /// <returns></returns>
  418. public static List<string> GetNearDay(DateTimeOffset dateTime, int dayNumber)
  419. {
  420. List<string> days = new();
  421. days = Enumerable.Range(1, dayNumber).Select(i => dateTime.Date.AddDays(-i).ToString("yyyyMMdd")).ToList();
  422. return days;
  423. }
  424. /// <summary>
  425. /// 12个月 单个list<double>
  426. /// </summary>
  427. /// <param name="doubles"></param>
  428. /// <param name="year"></param>
  429. /// <param name="month"></param>
  430. /// <returns></returns>
  431. public static List<YearMonth> GetYearMonth(List<double> doubles, int year = 0, int month = 0)
  432. {
  433. List<YearMonth> months = new();
  434. if (doubles.Count > 0)
  435. {
  436. DateTimeOffset dateTime = DateTimeOffset.Now;
  437. if (year == 0)
  438. year = dateTime.Year;
  439. if (month == 0)
  440. month = dateTime.Month;
  441. List<int> isLeapYear = (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? isLeapYear = leapY : isLeapYear = flatY;
  442. double[] array = doubles.ToArray();
  443. double ser = doubles.Sum();
  444. int moth = 1;
  445. int primaryD = 0;
  446. for (int i = 0; i < isLeapYear.Count; i++)
  447. {
  448. if (month < moth)
  449. break;
  450. double[] temp = new double[isLeapYear[i]];
  451. Array.ConstrainedCopy(array, primaryD, temp, 0, isLeapYear[i]);
  452. months.Add(new YearMonth() { id = $"{year}-{moth}", cnt = temp.Sum() });
  453. moth += 1;
  454. primaryD += isLeapYear[i];
  455. }
  456. }
  457. return months;
  458. }
  459. /// <summary>
  460. /// 12个月 多个list<double>
  461. /// </summary>
  462. /// <param name="listDoubles"></param>
  463. /// <param name="year"></param>
  464. /// <param name="month"></param>
  465. /// <returns></returns>
  466. public static List<YearMonth> GetYearMonths(List<List<double>> listDoubles, int year = 0, int month = 0)
  467. {
  468. List<YearMonth> months = new();
  469. foreach (var doubles in listDoubles)
  470. {
  471. if (doubles.Count > 0)
  472. {
  473. DateTimeOffset dateTime = DateTimeOffset.Now;
  474. if (year == 0)
  475. year = dateTime.Year;
  476. if (month == 0)
  477. month = dateTime.Month;
  478. List<int> isLeapYear = (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? isLeapYear = leapY : isLeapYear = flatY;
  479. double[] array = doubles.ToArray();
  480. double ser = doubles.Sum();
  481. int moth = 1;
  482. int primaryD = 0;
  483. for (int i = 0; i < isLeapYear.Count; i++)
  484. {
  485. if (month < moth)
  486. break;
  487. double[] temp = new double[isLeapYear[i]];
  488. Array.ConstrainedCopy(array, primaryD, temp, 0, isLeapYear[i]);
  489. months.Add(new YearMonth() { id = $"{year}-{moth}", cnt = temp.Sum() });
  490. moth += 1;
  491. primaryD += isLeapYear[i];
  492. }
  493. }
  494. }
  495. return months;
  496. }
  497. }
  498. }