/// <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);string
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;
}it
/// <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;
}date