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);
}
}
}