1、根据年份计算周次
public class WeekDisPlay
{
public int WeekNumber { get; set; }
public string WeekSort { get; set; }
}
/// <summary>
/// 根据年份计算共多少周
/// </summary>
/// <param name="year">年份</param>
public List<WeekDisPlay> CalculateWeeksByYear(string year)
{
int inputYear = Convert.ToInt32(year);
int allDays = (inputYear % 4 == 0 && inputYear % 100 != 0 || inputYear % 400 == 0) ? 366 : 365;//根据年份获取当前年的总天数
int weeksCount = 0;
if (allDays % 7 == 0)
{
weeksCount = allDays / 7;
}
else
{
weeksCount = (allDays / 7) + 1;
}
List<WeekDisPlay> weekList = new List<WeekDisPlay>();
for(int i = 1; i <= weeksCount; i++)
{
WeekDisPlay item = new WeekDisPlay();
item.WeekNumber = i;
item.WeekSort = "第" + i.ToString() + "周";
weekList.Add(item);
}
return weekList ;
}
2、根据年份和周次计算起止日期(按照自然周)
/// <summary>
/// 根据年份和周,计算当前周所对应的日期(按自然周计算)
/// </summary>
/// <param name="year">年份</param>
/// <param name="week">周次(第几周)</param>
public string CalculateDate(string year,string week)
{
var first = DateTime.MinValue;
var last = DateTime.MinValue;
int inputYear = Convert.ToInt32(year);
int inputWeek = Convert.ToInt32(week);
DateTime startDay = new DateTime(inputYear, 1, 1); //该年第一天
DateTime endDay = new DateTime(inputYear + 1, 1, 1).AddMilliseconds(-1);//该年的最后一天
int dayOfWeek = 0;
if (Convert.ToInt32(startDay.DayOfWeek.ToString("d")) > 0)
{
dayOfWeek = Convert.ToInt32(startDay.DayOfWeek.ToString("d")); //该年第一天为星期几
}
if (dayOfWeek == 0)
{
dayOfWeek = 7;
}
if (inputWeek == 1)
{
first = startDay.AddDays(7 - dayOfWeek - 6);
if (dayOfWeek == 6)
{
last = first;
}
else
{
last = startDay.AddDays((7 - dayOfWeek));
}
}
else
{
first = startDay.AddDays((8 - dayOfWeek) + (inputWeek - 2) * 7); //index周的起始日期
last = first.AddDays(6);
}
if(first< startDay)
{
first = startDay;
}
if (last > endDay)
{
last = endDay;
}
return first.ToString("yyyy-MM-dd") + "至" + last.ToString("yyyy-MM-dd");
}
4、根据年份和周次计算起止日期(按照每7天一周)
/// <summary>
/// 根据年份和周次计算起止日期(按照每七天一周计算)
/// </summary>
/// <param name="year">年份</param>
/// <param name="week">周次(第几周)</param>
public string CalculateDateByDays(string year, string week)
{
var first = DateTime.MinValue;
var last = DateTime.MinValue;
int inputYear = Convert.ToInt32(year);
int inputWeek = Convert.ToInt32(week);
DateTime startDay = new DateTime(inputYear, 1, 1); //该年第一天
DateTime endDay = new DateTime(inputYear + 1, 1, 1).AddMilliseconds(-1);//该年的最后一天
int startDays = (inputWeek - 1) * 7;
int endDays = inputWeek * 7-1;
first = startDay.AddDays(startDays);
last = startDay.AddDays(endDays);
if (first < startDay)
{
first = startDay;
}
if (last > endDay)
{
last = endDay;
}
return first.ToString("yyyy-MM-dd") + "至" + last.ToString("yyyy-MM-dd");
}