输入年和周得到对应的,年月日,星期几,当前周,总周数,当前周标记
/// <summary>
/// 根据传过来的周找对应的年月日和星期几
/// </summary>
/// <param name="week"></param>
/// <returns></returns>
public static List<DateAndXQ> GetDateByWeek(int week, int year=0, int status = 0) //周,月,状态
{
//当前时间
var NowTime = DateTime.Now;
//当前周
GregorianCalendar gc = new GregorianCalendar();
int weekOfYear = gc.GetWeekOfYear(NowTime, CalendarWeekRule.FirstDay, DayOfWeek.Monday);
List<DateAndXQ> datetime = new List<DateAndXQ>();
//获取当前的年份
var someTime = Convert.ToDateTime(status == 0 ? NowTime.ToString("yyyy-1-1") : NowTime.AddYears(1).ToString("yyyy-1-1"));
if (year!=0)
{
someTime = Convert.ToDateTime(year+"- 1 - 1");
}
//判断本年有多少周
int countDay = DateTime.Parse(someTime.Year + "-12-31").DayOfYear;
int countWeek = countDay / 7;
if (week > 0 && week <= countWeek)//做数据控制防止输错,造成数据混乱
{
int i = someTime.DayOfWeek - DayOfWeek.Monday;
if (i == -1) i = 6;// i值 > = 0 ,因为枚举原因,Sunday排在最前,此时Sunday-Monday=-1,必须+7=6。
TimeSpan ts = new TimeSpan(i, 0, 0, 0);
//获取第N周的星期一
someTime = someTime.Subtract(ts).AddDays((week - 1) * 7);
////获得星期几
//someTime = someTime.AddDays(day - 1);
var cnt = status == 1 ? 1 : 7;//如果是1则只查每周的开始结束时间
for (int x = 1; x <= cnt; x++)
{
DateAndXQ time = new DateAndXQ();
//获得星期几
time.Date = someTime.AddDays(x - 1).ToString("yyyy-MM-dd");
time.MinDate = someTime.AddDays(0).ToString("yyyy-MM-dd");
time.MaxDate = someTime.AddDays(6).ToString("yyyy-MM-dd");
//根据循环出的日期找出对应的月和天对应的星期
//转化为日期格式
var dates = Convert.ToDateTime(time.Date);
var years = dates.Year;
var month = dates.Month;
var day = dates.Day;
time.Week = CaculateWeekDay(years, month, day);
time.WeekCnt = countWeek;
time.WeekNow = week;
//当前周标记
time.WeekNowFlag = weekOfYear == week ? "T" : "F";
datetime.Add(time);
}
}
return datetime;
}
/// <summary>
/// 根据年月日获得星期几
/// </summary>
/// <param name="year"></param>
/// <param name="month"></param>
/// <param name="day"></param>
/// <returns></returns>
private static string CaculateWeekDay(int year, int month, int day)
{
string weekstr = string.Empty;
//把一月和二月看成是上一年的十三月和十四月
if (month == 1) { month = 13; year--; }
if (month == 2) { month = 14; year--; }
int week = (day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400) % 7;
switch (week)
{
case 0: weekstr = "星期一"; break;
case 1: weekstr = "星期二"; break;
case 2: weekstr = "星期三"; break;
case 3: weekstr = "星期四"; break;
case 4: weekstr = "星期五"; break;
case 5: weekstr = "星期六"; break;
case 6: weekstr = "星期日"; break;
}
return weekstr;
}