TimeHelper.cs 28 KB

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