using System; using System.Collections.Generic; using TEAMModelBI.Models; namespace TEAMModelBI.Tool { public static class TimeHelper { /// /// 获取月份的开始和结束时间戳 10位 /// /// /// /// public static (long start, long end) GetMonthStartEnd10(int year, int month) { DateTime dt = DateTime.Parse($"{year}-{month}"); DateTime dtNew = new DateTime(dt.Year, dt.Month, 1); long start = DateTimeOffset.Parse($"{dtNew}").ToUnixTimeSeconds(); var ste = dtNew.AddMonths(1).AddDays(-1).Day; long end = DateTimeOffset.Parse($"{dt.Year}-{dt.Month}-{ste} 23:59:59").ToUnixTimeSeconds(); return (start, end); } /// /// 获取月份的开始和结束时间戳 13位 /// /// /// /// public static (long start, long end) GetMonthStartEnd13(int year, int month) { DateTime dt = DateTime.Parse($"{year}-{month}"); DateTime dtNew = new DateTime(dt.Year, dt.Month, 1); long start = DateTimeOffset.Parse($"{dtNew}").ToUnixTimeMilliseconds(); var ste = dtNew.AddMonths(1).AddDays(-1).Day; long end = DateTimeOffset.Parse($"{dt.Year}-{dt.Month}-{ste} 23:59:59").ToUnixTimeMilliseconds(); return (start, end); } /// /// 获取今年12个月的月份开始和结束时间戳 10位 /// /// /// public static List GetYearMonthlyStartEnd10(int year) { List monthStartEnds = new List(); for (int i = 1; i <= 12; i++) { MonthStartEnd monthStartEnd = new MonthStartEnd() { yearMonth = $"{year}-{i}" }; DateTime dt = DateTime.Parse($"{year}-{i}"); DateTime dtNew = new DateTime(dt.Year, dt.Month, 1); long start = DateTimeOffset.Parse($"{dtNew}").ToUnixTimeSeconds(); monthStartEnd.start = start; var ste = dtNew.AddMonths(1).AddDays(-1).Day; long end = DateTimeOffset.Parse($"{dt.Year}-{dt.Month}-{ste} 23:59:59").ToUnixTimeSeconds(); monthStartEnd.end = end; monthStartEnds.Add(monthStartEnd); } return monthStartEnds; } /// /// 获取今年12个月的月份开始和结束时间戳 13位 /// /// /// public static List GetYearMonthlyStartEnd13(int year) { List monthStartEnds = new List(); for (int i = 1; i <= 12; i++) { MonthStartEnd monthStartEnd = new MonthStartEnd() { yearMonth = $"{year}-{i}" }; DateTime dt = DateTime.Parse($"{year}-{i}"); DateTime dtNew = new DateTime(dt.Year, dt.Month, 1); long start = DateTimeOffset.Parse($"{dtNew}").ToUnixTimeMilliseconds(); monthStartEnd.start = start; var ste = dtNew.AddMonths(1).AddDays(-1).Day; long end = DateTimeOffset.Parse($"{dt.Year}-{dt.Month}-{ste} 23:59:59").ToUnixTimeMilliseconds(); monthStartEnd.end = end; monthStartEnds.Add(monthStartEnd); } return monthStartEnds; } /// /// 获取过去12个月的每月开始和结束的时间戳 /// /// 日期 /// true :13位时间戳 false:10位时间戳 /// public static List monthsOfYear(string yearMonth, bool dateLenth = true) { List monthStartEnds = new List(); DateTime dateTime = DateTime.Parse(yearMonth); int year = dateTime.Year; int month = dateTime.Month; List months = new List(); while (year > dateTime.Year - 1 || month > dateTime.Month) { MonthStartEnd monthStartEnd = new MonthStartEnd() { yearMonth = $"{year}-{month}" }; DateTime dtNew = new DateTime(year, month, 1); long start = dateLenth ? DateTimeOffset.Parse($"{dtNew}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{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; } /// /// 获取传过来的时间学期的开始时间戳和结束时间 /// /// 日期 /// true :13位时间戳 false:10位时间戳 /// public static (long start, long end) GetTermStartOrEnd(DateTime 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) { DateTime newStart = new DateTime(year, 3, 1); start = dateLenth ? DateTimeOffset.Parse($"{newStart}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{newStart}").ToUnixTimeSeconds(); DateTime newEnd = new DateTime(year, 8, 31, 23, 59, 59); end = dateLenth ? DateTimeOffset.Parse($"{newEnd}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{newEnd}").ToUnixTimeSeconds(); } else { //计算当前月份 int days = 0; if (month >= 9) { DateTime newStart = new DateTime(dateTime.Year, 9, 1); start = dateLenth ? DateTimeOffset.Parse($"{newStart}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{newStart}").ToUnixTimeSeconds(); DateTime newEnd = new DateTime(dateTime.Year + 1, 2, (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? days = 29 : days = 28, 23, 59, 59); end = dateLenth ? DateTimeOffset.Parse($"{newEnd}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{newEnd}").ToUnixTimeSeconds(); } else { DateTime newStart = new DateTime(dateTime.Year - 1, 9, 1); start = dateLenth ? DateTimeOffset.Parse($"{newStart}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{newStart}").ToUnixTimeSeconds(); DateTime newEnd = new DateTime(dateTime.Year, 2, (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? days = 29 : days = 28, 23, 59, 59); end = dateLenth ? DateTimeOffset.Parse($"{newEnd}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{newEnd}").ToUnixTimeSeconds(); } } return (start, end); } /// /// 开始时间和结束时间戳 /// /// /// /// /// public static (long start, long end) GetStartOrEnd(DateTimeOffset dateTime, string type = "", bool dateLenth = true) { long start = 0; long end = 0; DateTimeOffset tempStrart = new(); DateTimeOffset tempEnt = new(); switch (type) { case "year": tempStrart = new DateTime(dateTime.Year,1, 1); tempEnt = new DateTime(dateTime.Year, 12, DateTime.DaysInMonth(dateTime.Year, 12), 23, 59, 59); break; case "term": int year = dateTime.Year; int month = dateTime.Month; if (month <= 8 && month >= 3) { tempStrart = new DateTime(year, 3, 1); tempEnt = new DateTime(year, 8, 31, 23, 59, 59); } else { //计算当前月份 int days = 0; if (month >= 9) { tempStrart = new DateTime(dateTime.Year, 9, 1); tempEnt = new DateTime(dateTime.Year + 1, 2, (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? days = 29 : days = 28, 23, 59, 59); } else { tempStrart = new DateTime(dateTime.Year - 1, 9, 1); tempEnt = new DateTime(dateTime.Year, 2, (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? days = 29 : days = 28, 23, 59, 59); } } break; case "month": tempStrart = new DateTime(dateTime.Year, dateTime.Month, 1); tempEnt = new DateTime(dateTime.Year, dateTime.Month, DateTime.DaysInMonth(dateTime.Year, dateTime.Month), 23, 59, 59); break; case "week": DateTimeOffset weekStrart = dateTime.AddDays(-(int)(dateTime.DayOfWeek) + 1); DateTimeOffset weekEnd = dateTime.AddDays(7-(int)(dateTime.DayOfWeek)); tempStrart = new DateTime(weekStrart.Year, weekStrart.Month, weekStrart.Day); tempEnt = new DateTime(weekEnd.Year, weekEnd.Month, weekEnd.Day, 23, 59, 59); break; default: tempStrart = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day); tempEnt = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, 23, 59, 59); //start = dateLenth ? DateTimeOffset.Parse($"{dayStart}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{dayStart}").ToUnixTimeSeconds(); //end = dateLenth ? DateTimeOffset.Parse($"{dayEnd}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{dayEnd}").ToUnixTimeSeconds(); break; } start = dateLenth ? DateTimeOffset.Parse($"{tempStrart}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{tempStrart}").ToUnixTimeSeconds(); end = dateLenth ? DateTimeOffset.Parse($"{tempEnt}").ToUnixTimeMilliseconds() : DateTimeOffset.Parse($"{tempEnt}").ToUnixTimeSeconds(); return (start, end); } } }