123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading.Tasks;
- using TEAMModelOS.SDK.Models.Cosmos.BI;
- namespace TEAMModelOS.SDK.Models.Service.BI
- {
- public static class TimeHelper
- {
- /// <summary>
- /// 平年
- /// </summary>
- public static List<int> flatY = new() { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
- /// <summary>
- /// 闰年
- /// </summary>
- public static List<int> leapY = new() { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
- /// <summary>
- /// 将时间戳转换成时间
- /// </summary>
- /// <param name="dateS"></param>
- /// <param name="dateE"></param>
- /// <returns></returns>
- public static (DateTimeOffset timeS, DateTimeOffset timeE) GetLongToTime(long dateS,long dateE)
- {
- DateTimeOffset timeS = new(), timeE = new();
- if (dateS > 1000000000000)
- timeS = DateTimeOffset.FromUnixTimeMilliseconds(dateS);
- else
- timeS = DateTimeOffset.FromUnixTimeSeconds(dateS);
- if (dateE > 1000000000000)
- timeE = DateTimeOffset.FromUnixTimeMilliseconds(dateE);
- else
- timeE = DateTimeOffset.FromUnixTimeSeconds(dateE);
- return (timeS, timeE);
- }
- /// <summary>
- /// 通过时间戳转换为时间
- /// </summary>
- /// <param name="timeStamp"></param>
- /// <returns></returns>
- public static DateTimeOffset GetDateTime(long timeStamp)
- {
- long begtime = timeStamp * 10000;
- DateTimeOffset dt_1970 = new(1970, 1, 1, 0, 0, 0, TimeSpan.Zero);
- long tricks_1970 = dt_1970.Ticks;//1970年1月1日刻度
- long time_tricks = tricks_1970 + begtime;//日志日期刻度
- DateTimeOffset dt = new DateTime(time_tricks);//转化为DateTime
- return dt;
- }
- /// <summary>
- /// 通过string装换为时间并获取时间的年、月、日、一年第几天、小时
- /// </summary>
- /// <param name="time">时间,例如:2022060706</param>
- /// <param name="timeStrType">时间类型: 例如:yyyyMMddHH </param>
- /// <returns></returns>
- public static (int year, int month, int day, int days, int hour) GetDateTime(string time, string timeStrType = null)
- {
- string type = "yyyyMMddHH";
- if (!string.IsNullOrEmpty(timeStrType))
- {
- type = timeStrType;
- }
- int year = 0, month = 0, day = 0, days = 0, hour = 0;
- DateTimeOffset dateTime = new();
- dateTime = DateTime.ParseExact(time, type, System.Globalization.CultureInfo.CurrentCulture);
- year = dateTime.Year;
- month = dateTime.Month;
- day = dateTime.Day;
- DateTimeOffset dt1 = new DateTime(year, 1, 1);
- days = (dateTime.Date - dt1.Date).Days + 1;
- hour = dateTime.Hour;
- return (year, month, day, days, hour);
- }
- /// <summary>
- /// 获取月份的开始和结束时间戳 13位
- /// </summary>
- /// <param name="year"></param>
- /// <param name="month"></param>
- /// <returns></returns>
- public static (long start, long end) GetMonthStartEnd(int year, int month, bool dateLenth = true)
- {
- DateTimeOffset dtNew = new(year, month, 1, 0, 0, 0, TimeSpan.Zero);
- long start = DateTimeOffset.Parse($"{dtNew}").ToUnixTimeMilliseconds();
- if (dateLenth == false) start = DateTimeOffset.Parse($"{dtNew}").ToUnixTimeSeconds();
- var ste = dtNew.AddMonths(1).AddDays(-1).Day;
- long end = new DateTimeOffset(dtNew.Year, dtNew.Month, ste, 23, 59, 59, TimeSpan.Zero).ToUnixTimeMilliseconds();
- // DateTimeOffset.Parse($"{dt.Year}-{dt.Month}-{ste} 23:59:59").ToUnixTimeMilliseconds();
- if (dateLenth == false) end = new DateTimeOffset(dtNew.Year, dtNew.Month, dtNew.Day, 23, 59, 59, TimeSpan.Zero).ToUnixTimeSeconds();
- //DateTimeOffset.Parse($"{dt.Year}-{dt.Month}-{ste} 23:59:59").ToUnixTimeSeconds();
- return (start, end);
- }
- /// <summary>
- /// 通过时间获取当前年开始月份到现在月的开始时间到结束时间 现在月是当前天的结束时间
- /// </summary>
- /// <param name="date"></param>
- /// <param name="dateLenth"></param>
- /// <returns></returns>
- public static async Task<List<StartEndTime>> GetYearSataMthCtMth(DateTimeOffset date, bool dateLenth = true)
- {
- int year = date.Year;
- int mth = date.Month;
- int day = date.Day;
- List<StartEndTime> monthStartEnds = new();
- for (int i = 1; i <= mth; i++)
- {
- StartEndTime monthStartEnd = new() { date = $"{year}-{i}" };
- //DateTime dt = DateTime.Parse($"{year}-{i}");
- DateTimeOffset dtNew = new(year, i, 1, 0, 0, 0, TimeSpan.Zero);
- long start = dtNew.ToUnixTimeMilliseconds();
- if (dateLenth == false)
- start = DateTimeOffset.Parse($"{dtNew}").ToUnixTimeSeconds();
- monthStartEnd.start = start;
- long end = 0;
- if (i == mth)
- {
- end = DateTimeOffset.Parse($"{year}-{mth}-{day} 23:59:59").ToUnixTimeMilliseconds();
- if (dateLenth == false)
- end = DateTimeOffset.Parse($"{year}-{mth}-{day} 23:59:59").ToUnixTimeSeconds();
- }
- else
- {
- var ste = dtNew.AddMonths(1).AddDays(-1).Day;
- end = DateTimeOffset.Parse($"{dtNew.Year}-{dtNew.Month}-{ste} 23:59:59").ToUnixTimeMilliseconds();
- if (dateLenth == false)
- end = DateTimeOffset.Parse($"{dtNew.Year}-{dtNew.Month}-{ste} 23:59:59").ToUnixTimeSeconds();
- }
- monthStartEnd.end = end;
- monthStartEnds.Add(monthStartEnd);
- }
- return monthStartEnds;
- }
- /// <summary>
- /// 获取今年12个月的月份开始和结束时间戳 13位 10位
- /// </summary>
- /// <param name="year">年份</param>
- /// <param name="dateLenth">true :13位时间戳 false:10位时间戳</param>
- /// <returns></returns>
- public static List<StartEndTime> GetYearMonthlyStartEnd(int year, bool dateLenth = true)
- {
- List<StartEndTime> monthStartEnds = new();
- for (int i = 1; i <= 12; i++)
- {
- StartEndTime monthStartEnd = new() { date = $"{year}-{i}" };
- //DateTime dt = DateTime.Parse($"{year}-{i}");
- DateTimeOffset dtNew = new(year, i, 1, 0, 0, 0, TimeSpan.Zero);
- long start = dtNew.ToUnixTimeMilliseconds();
- if (dateLenth == false)
- start = dtNew.ToUnixTimeSeconds();
- monthStartEnd.start = start;
- var ste = dtNew.AddMonths(1).AddDays(-1).Day;
- long end = DateTimeOffset.Parse($"{dtNew.Year}-{dtNew.Month}-{ste} 23:59:59").ToUnixTimeMilliseconds();
- if (dateLenth == false)
- end = DateTimeOffset.Parse($"{dtNew.Year}-{dtNew.Month}-{ste} 23:59:59").ToUnixTimeSeconds();
- monthStartEnd.end = end;
- monthStartEnds.Add(monthStartEnd);
- }
- return monthStartEnds;
- }
- /// <summary>
- /// 获取过去12个月的每月开始和结束的时间戳
- /// </summary>
- /// <param name="yearMonth">日期</param>
- /// <param name="dateLenth">true :13位时间戳 false:10位时间戳</param>
- /// <returns></returns>
- public static List<StartEndTime> monthsOfYear(string yearMonth, bool dateLenth = true)
- {
- List<StartEndTime> monthStartEnds = new();
- DateTime dateTime = DateTime.Parse(yearMonth);
- int year = dateTime.Year;
- int month = dateTime.Month;
- List<string> months = new();
- while (year > dateTime.Year - 1 || month > dateTime.Month)
- {
- StartEndTime monthStartEnd = new() { date = $"{year}-{month}" };
- DateTimeOffset dtNew = new(year, month, 1, 0, 0, 0, TimeSpan.Zero);
- long start = dateLenth ? dtNew.ToUnixTimeMilliseconds() : dtNew.ToUnixTimeSeconds();
- monthStartEnd.start = start;
- var ste = dtNew.AddMonths(1).AddDays(-1).Day;
- 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();
- monthStartEnd.end = end;
- monthStartEnds.Add(monthStartEnd);
- months.Add($"{year}-{(month < 10 ? "0" : "") + month}");
- month -= 1;
- if (month <= 0)
- {
- year -= 1;
- month = 12;
- }
- }
- return monthStartEnds;
- }
- /// <summary>
- /// 获取传过来的时间学期的开始时间戳和结束时间
- /// </summary>
- /// <param name="dateTime">日期</param>
- /// <param name="dateLenth">true :13位时间戳 false:10位时间戳 </param>
- /// <returns></returns>
- public static (long start, long end) GetTermStartOrEnd(DateTimeOffset dateTime, bool dateLenth = true)
- {
- long start = 0;
- long end = 0;
- //DateTime dateTime = tempDateTime;
- int year = dateTime.Year;
- int month = dateTime.Month;
- if (month <= 8 && month >= 3)
- {
- DateTimeOffset newStart = new(year, 3, 1, 0, 0, 0, TimeSpan.Zero);
- start = dateLenth ? DateTimeOffset.Parse($"{newStart}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{newStart}").ToUnixTimeSeconds();
- DateTimeOffset newEnd = new(year, 8, 31, 23, 59, 59, TimeSpan.Zero);
- end = dateLenth ? DateTimeOffset.Parse($"{newEnd}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{newEnd}").ToUnixTimeSeconds();
- }
- else
- {
- //计算当前月份
- int days = 0;
- if (month >= 9)
- {
- DateTimeOffset newStart = new(dateTime.Year, 9, 1, 0, 0, 0, TimeSpan.Zero);
- start = dateLenth ? newStart.ToUnixTimeMilliseconds() : newStart.ToUnixTimeSeconds();
- 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);
- end = dateLenth ? newEnd.ToUnixTimeMilliseconds() : newEnd.ToUnixTimeSeconds();
- }
- else
- {
- DateTimeOffset newStart = new(dateTime.Year - 1, 9, 1, 0, 0, 0, TimeSpan.Zero);
- start = dateLenth ? newStart.ToUnixTimeMilliseconds() : newStart.ToUnixTimeSeconds();
- DateTimeOffset newEnd = new(dateTime.Year, 2, (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? days = 29 : days = 28, 23, 59, 59, TimeSpan.Zero);
- end = dateLenth ? newEnd.ToUnixTimeMilliseconds() : newEnd.ToUnixTimeSeconds();
- }
- }
- return (start, end);
- }
- /// <summary>
- /// 开始时间和结束时间戳
- /// </summary>
- /// <param name="dateTime"></param>
- /// <param name="type"></param>
- /// <param name="dateLenth"></param>
- /// <returns></returns>
- public static (long start, long end) GetStartOrEnd(DateTimeOffset dateTime, string type = "", bool dateLenth = true)
- {
- try
- {
- long start = 0;
- long end = 0;
- int year = dateTime.Year;
- int month = dateTime.Month;
- int day = dateTime.Day;
- int hour = dateTime.Hour;
- DateTimeOffset tempStrart = new();
- DateTimeOffset tempEnd = new();
- switch (type)
- {
- //今年开始、结束
- case "yearMonth":
- tempStrart = new DateTimeOffset(year, 1, 1, 0, 0, 0, TimeSpan.Zero);
- tempEnd = new DateTimeOffset(year, month, DateTime.DaysInMonth(year, month), 23, 59, 59, TimeSpan.Zero);
- break;
- //今年开始、结束
- case "year":
- tempStrart = new DateTimeOffset(year, 1, 1, 0, 0, 0, TimeSpan.Zero);
- tempEnd = new DateTimeOffset(year, 12, DateTime.DaysInMonth(year, 12), 23, 59, 59, TimeSpan.Zero);
- break;
- //去年开始、结束
- case "lastYear":
- tempStrart = new DateTimeOffset(year - 1, 1, 1, 0, 0, 0, TimeSpan.Zero);
- tempEnd = new DateTimeOffset(year - 1, 12, DateTime.DaysInMonth(year, 12), 23, 59, 59, TimeSpan.Zero);
- break;
- //本学期
- case "term":
- if (month <= 8 && month >= 3)
- {
- tempStrart = new DateTimeOffset(year, 3, 1, 0, 0, 0, TimeSpan.Zero);
- tempEnd = new DateTimeOffset(year, 8, 31, 23, 59, 59, TimeSpan.Zero);
- }
- else
- {
- //计算当前月份
- int days = 0;
- if (month >= 9)
- {
- tempStrart = new DateTimeOffset(year, 9, 1, 0, 0, 0, TimeSpan.Zero);
- tempEnd = new DateTimeOffset(year + 1, 2, DateTime.DaysInMonth(year + 1, 2), 23, 59, 59, TimeSpan.Zero);
- }
- else
- {
- tempStrart = new DateTimeOffset(year - 1, 9, 1, 0, 0, 0, TimeSpan.Zero);
- tempEnd = new DateTimeOffset(year, 2, DateTime.DaysInMonth(year, 2), 23, 59, 59, TimeSpan.Zero);
- }
- }
- break;
- //上学期
- case "lastterm":
- DateTimeOffset tempDate = new();
- if (dateTime.Month > 9)
- tempDate = new DateTimeOffset(year, dateTime.Month - 4, 1, 0, 0, 0, TimeSpan.Zero);
- else
- {
- if (dateTime.Month < 3)
- {
- tempDate = new DateTimeOffset(year - 1, 3, 1, 0, 0, 0, TimeSpan.Zero);
- }
- else
- {
- tempDate = new DateTimeOffset(year - 1, 9, 1, 0, 0, 0, TimeSpan.Zero);
- }
- }
- if (!string.IsNullOrEmpty($"{tempDate}"))
- {
- year = tempDate.Year;
- month = tempDate.Month;
- if (month <= 8 && month >= 3)
- {
- tempStrart = new DateTimeOffset(year, 3, 1, 0, 0, 0, TimeSpan.Zero);
- tempEnd = new DateTimeOffset(year, 8, 31, 23, 59, 59, TimeSpan.Zero);
- }
- else
- {
- //计算当前月份
- int days = 0;
- if (month >= 9)
- {
- tempStrart = new DateTimeOffset(year, 9, 1, 0, 0, 0, TimeSpan.Zero);
- tempEnd = new DateTimeOffset(year + 1, 2, DateTime.DaysInMonth(year + 1, 2), 23, 59, 59, TimeSpan.Zero);
- }
- else
- {
- tempStrart = new DateTimeOffset(year - 1, 9, 1, 0, 0, 0, TimeSpan.Zero);
- tempEnd = new DateTimeOffset(year, 2, DateTime.DaysInMonth(year, 2), 23, 59, 59, TimeSpan.Zero);
- }
- }
- }
- break;
- //上个月
- case "lastMonth":
- if (month == 1)
- {
- year--;
- month = 12;
- }
- else
- {
- month--;
- }
- tempStrart = new DateTimeOffset(year, month, 1, 0, 0, 0, TimeSpan.Zero);
- tempEnd = new DateTimeOffset(year, month, DateTime.DaysInMonth(year, month), 23, 59, 59, TimeSpan.Zero);
- break;
- //本月1号至当天
- case "monthDay":
- tempStrart = new DateTimeOffset(year, month, 1, 0, 0, 0, TimeSpan.Zero);
- tempEnd = new DateTimeOffset(year, month, day, 23, 59, 59, TimeSpan.Zero);
- break;
- //本月
- case "month":
- tempStrart = new DateTimeOffset(year, month, 1, 0, 0, 0, TimeSpan.Zero);
- tempEnd = new DateTimeOffset(year, month, DateTime.DaysInMonth(year, month), 23, 59, 59, TimeSpan.Zero);
- break;
- //上周
- case "week":
- DateTimeOffset weekStrart = dateTime.AddDays(-(int)(dateTime.DayOfWeek) + 1);
- DateTimeOffset weekEnd = dateTime.AddDays(7 - (int)(dateTime.DayOfWeek));
- tempStrart = new DateTimeOffset(weekStrart.Year, weekStrart.Month, weekStrart.Day, 0, 0, 0, TimeSpan.Zero);
- tempEnd = new DateTimeOffset(weekEnd.Year, weekEnd.Month, weekEnd.Day, 23, 59, 59, TimeSpan.Zero);
- break;
- //上周
- case "lastweek":
- var m = (dateTime.DayOfWeek == DayOfWeek.Sunday ? (DayOfWeek)7 : dateTime.DayOfWeek) - DayOfWeek.Monday;
- var s = (dateTime.DayOfWeek == DayOfWeek.Sunday ? (DayOfWeek)7 : dateTime.DayOfWeek) - (DayOfWeek)7;
- var Mon = dateTime.AddDays((-7 - m));//星期一
- var Sun = dateTime.AddDays((-7 - s)); //星期日
- tempStrart = new DateTimeOffset(Mon.Year, Mon.Month, Mon.Day, 0, 0, 0, TimeSpan.Zero);
- tempEnd = new DateTimeOffset(Sun.Year, Sun.Month, Sun.Day, 23, 59, 59, TimeSpan.Zero);
- break;
- //当前小时
- case "hour":
- tempStrart = new DateTimeOffset(year, month, day, hour, 0, 0, TimeSpan.Zero);
- tempEnd = new DateTimeOffset(year, month, day, hour, 59, 59, TimeSpan.Zero);
- break;
- //当天
- default:
- tempStrart = new DateTimeOffset(year, month, day, 0, 0, 0, TimeSpan.Zero);
- tempEnd = new DateTimeOffset(year, month, day, 23, 59, 59, TimeSpan.Zero);
- //start = dateLenth ? DateTimeOffset.Parse($"{dayStart}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{dayStart}").ToUnixTimeSeconds();
- //end = dateLenth ? DateTimeOffset.Parse($"{dayEnd}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{dayEnd}").ToUnixTimeSeconds();
- break;
- }
- start = dateLenth ? tempStrart.ToUnixTimeMilliseconds() : tempStrart.ToUnixTimeSeconds();
- end = dateLenth ? tempEnd.ToUnixTimeMilliseconds() : tempEnd.ToUnixTimeSeconds();
- return (start, end);
- }
- catch (Exception ex)
- {
- throw;
- }
- }
- /// <summary>
- /// 计算每年获取开始时间
- /// </summary>
- /// <param name="dateTime"></param>
- /// <param name="dateLenth"></param>
- /// <returns></returns>
- public static List<StartEndTime> GetYearEveryDay(DateTimeOffset dateTime, bool dateLenth = true,bool isCurrDay = false)
- {
- List<StartEndTime> dayStartEen = new();
- int year = dateTime.Year;
- int curry = dateTime.DayOfYear;
- List<int> isLeapYear = (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? isLeapYear = leapY : isLeapYear = flatY;
- for (int m = 1; m <= 12; m++)
- {
- for (int d = 1; d <= isLeapYear[m - 1]; d++)
- {
- if (isCurrDay == true && (curry <= dayStartEen.Count))
- break;
- DateTimeOffset tempStrart = new(year, m, d, 0, 0, 0, TimeSpan.Zero);
- DateTimeOffset tempEnd = new(year, m, d, 23, 59, 59, TimeSpan.Zero);
- long longStart = dateLenth ? tempStrart.ToUnixTimeMilliseconds() : tempStrart.ToUnixTimeSeconds();
- long longEnd = dateLenth ? tempEnd.ToUnixTimeMilliseconds() : tempEnd.ToUnixTimeSeconds();
- dayStartEen.Add(new StartEndTime() { date = $"{year}-{m}-{d}", start = longStart, end = longEnd });
- }
- ////DateTime 有方法
- //DateTime monthStart = new DateTime(year, i, 01);
- //DateTime monthEnd = dateTime.AddMonths(1);
- //DateTimeOffset tempStrart = new DateTimeOffset(year, i, days, 0, 0, 0, TimeSpan.Zero);
- //DateTimeOffset tempEnd = new DateTimeOffset(year, i, days, 23, 59, 59, TimeSpan.Zero);
- }
- return dayStartEen;
- }
- /// <summary>
- /// 将时间戳格式 转换成string类型
- /// 例:yyyyMMdd,等string类型
- /// </summary>
- /// <param name="unixTime"></param>
- /// <returns></returns>
- public static (string timeStart, string timeEnd) GetUnixToDate(long start, long end = 0, string types = "yyyyMMdd")
- {
- string tStart = "";
- string tEnd = "";
- DateTimeOffset time = System.TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1, 0, 0, 0, 0));
- tStart = time.AddMilliseconds(start).ToString($"{types}");
- if (end > 0)
- {
- tEnd = time.AddMilliseconds(end).ToString($"{types}");
- }
- return (tStart, tEnd);
- }
- /// <summary>
- /// 获取每天的时间
- /// </summary>
- /// <param name="dateTime">时间</param>
- /// <param name="dayNumber">最近几天</param>
- /// <returns></returns>
- public static List<string> GetNearDay(DateTimeOffset dateTime, int dayNumber)
- {
- List<string> days = new();
- days = Enumerable.Range(1, dayNumber).Select(i => dateTime.Date.AddDays(-i).ToString("yyyyMMdd")).ToList();
- return days;
- }
- /// <summary>
- /// 12个月 单个list<double>
- /// </summary>
- /// <param name="doubles"></param>
- /// <param name="year"></param>
- /// <param name="month"></param>
- /// <returns></returns>
- public static List<YearMonth> GetYearMonth(List<double> doubles, int year = 0, int month = 0)
- {
- List<YearMonth> months = new();
- if (doubles.Count > 0)
- {
- DateTimeOffset dateTime = DateTimeOffset.Now;
- if (year == 0)
- year = dateTime.Year;
- if (month == 0)
- month = dateTime.Month;
- List<int> isLeapYear = (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? isLeapYear = leapY : isLeapYear = flatY;
- double[] array = doubles.ToArray();
- double ser = doubles.Sum();
- int moth = 1;
- int primaryD = 0;
- for (int i = 0; i < isLeapYear.Count; i++)
- {
- if (month < moth)
- break;
- double[] temp = new double[isLeapYear[i]];
- Array.ConstrainedCopy(array, primaryD, temp, 0, isLeapYear[i]);
- months.Add(new YearMonth() { id = $"{year}-{moth}", cnt = temp.Sum() });
- moth += 1;
- primaryD += isLeapYear[i];
- }
- }
- return months;
- }
- /// <summary>
- /// 12个月 多个list<double>
- /// </summary>
- /// <param name="listDoubles"></param>
- /// <param name="year"></param>
- /// <param name="month"></param>
- /// <returns></returns>
- public static List<YearMonth> GetYearMonths(List<List<double>> listDoubles, int year = 0, int month = 0)
- {
- List<YearMonth> months = new();
- foreach (var doubles in listDoubles)
- {
- if (doubles.Count > 0)
- {
- DateTimeOffset dateTime = DateTimeOffset.Now;
- if (year == 0)
- year = dateTime.Year;
- if (month == 0)
- month = dateTime.Month;
- List<int> isLeapYear = (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? isLeapYear = leapY : isLeapYear = flatY;
- double[] array = doubles.ToArray();
- double ser = doubles.Sum();
- int moth = 1;
- int primaryD = 0;
- for (int i = 0; i < isLeapYear.Count; i++)
- {
- if (month < moth)
- break;
- double[] temp = new double[isLeapYear[i]];
- Array.ConstrainedCopy(array, primaryD, temp, 0, isLeapYear[i]);
- months.Add(new YearMonth() { id = $"{year}-{moth}", cnt = temp.Sum() });
- moth += 1;
- primaryD += isLeapYear[i];
- }
- }
- }
- return months;
- }
- /// <summary>
- /// 依据时间判定当月多少天
- /// </summary>
- /// <param name="dateTime"></param>
- /// <returns></returns>
- public static int GetDateDay(DateTimeOffset dateTime)
- {
- int day = 0;
- int month = dateTime.Month;
- int year = dateTime.Year;
- switch (month)
- {
- case 1:
- case 3:
- case 5:
- case 7:
- case 8:
- case 10:
- case 12:
- day = 31;
- break;
- case 4:
- case 6:
- case 9:
- case 11:
- day = 30;
- break;
- case 2:
- if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0))
- day = 29;
- else
- day = 28;
- break;
- }
- return day;
- }
- }
- }
|