123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 |
- using System;
- using System.Collections.Generic;
- using TEAMModelBI.Models;
- namespace TEAMModelBI.Tool
- {
- public static class TimeHelper
- {
- /// <summary>
- /// 获取月份的开始和结束时间戳 10位
- /// </summary>
- /// <param name="year"></param>
- /// <param name="month"></param>
- /// <returns></returns>
- 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);
- }
- /// <summary>
- /// 获取月份的开始和结束时间戳 13位
- /// </summary>
- /// <param name="year"></param>
- /// <param name="month"></param>
- /// <returns></returns>
- 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);
- }
- /// <summary>
- /// 获取今年12个月的月份开始和结束时间戳 10位
- /// </summary>
- /// <param name="year"></param>
- /// <returns></returns>
- public static List<MonthStartEnd> GetYearMonthlyStartEnd10(int year)
- {
- List<MonthStartEnd> monthStartEnds = new List<MonthStartEnd>();
- 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;
- }
- /// <summary>
- /// 获取今年12个月的月份开始和结束时间戳 13位
- /// </summary>
- /// <param name="year"></param>
- /// <returns></returns>
- public static List<MonthStartEnd> GetYearMonthlyStartEnd13(int year)
- {
- List<MonthStartEnd> monthStartEnds = new List<MonthStartEnd>();
- 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;
- }
- /// <summary>
- /// 获取过去12个月的每月开始和结束的时间戳
- /// </summary>
- /// <param name="yearMonth">日期</param>
- /// <param name="dateLenth">true :13位时间戳 false:10位时间戳</param>
- /// <returns></returns>
- public static List<MonthStartEnd> monthsOfYear(string yearMonth, bool dateLenth = true)
- {
- List<MonthStartEnd> monthStartEnds = new List<MonthStartEnd>();
- DateTime dateTime = DateTime.Parse(yearMonth);
- int year = dateTime.Year;
- int month = dateTime.Month;
- List<string> months = new List<string>();
- 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;
- }
- /// <summary>
- /// 获取传过来的时间学期的开始时间戳和结束时间
- /// </summary>
- /// <param name="dateTime">日期</param>
- /// <param name="dateLenth">true :13位时间戳 false:10位时间戳 </param>
- /// <returns></returns>
- 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);
- }
- /// <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)
- {
- 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);
- }
- }
- }
|