//根據年月獲取所有日期
//txt="2019-04"
public List<string> CalTime(string txt) {
DateTime beginTime=DateTime.Parse(txt+"-01");//本月初
DateTime endTime=DateTime.Parse( beginTime.AddMonths(1).AddDays(-1).ToShortDateString());//本月最後一天
List<string> dateList = new List<string>();
for (DateTime dt = beginTime; dt <= endTime; dt = dt.AddDays(1))
{
dateList .Add(dt.ToShortDateString());
}
return dateList ;
}
/// <summary>
/// 周的第一天
/// CalendarWeekRule.FirstDay, DayOfWeek.Sunday
/// </summary>
/// <param name="year"></param>
/// <param name="week"></param>
/// <returns></returns>
public static DateTime FirstDateOfWeek(int year, int week)
{
if (year < 1 || year > 9999)
throw new ArgumentException("illegal year", "year");
int maxWeek = MaxWeekOfYear(year);
if (week < 1 || week > maxWeek)
throw new ArgumentException("illegal week", "week");
if (week == 1)
return new DateTime(year, 1, 1);
DateTime firstDayOfYear = new DateTime(year, 1, 1);
DateTime day = firstDayOfYear.AddDays((week - 1) * 7);
DateTime ret = day.AddDays(-Convert.ToInt32(day.DayOfWeek));
return ret;
}
/// <summary>
/// 周的最後一天
/// </summary>
/// <param name="year"></param>
/// <param name="week"></param>
/// <returns></returns>
public static DateTime LastDateOfWeek(int year, int week)
{
if (year < 1 || year > 9999)
throw new ArgumentException("illegal year", "year");
int maxWeek = MaxWeekOfYear(year);
if (week < 1 || week > maxWeek)
throw new ArgumentException("illegal week", "week");
DateTime ret;
DateTime firstDay = FirstDateOfWeek(year, week);
if (week == 1)//week==1
{
ret = firstDay.AddDays(6 - Convert.ToInt32(firstDay.DayOfWeek));
}
else//week>1
{
DateTime tempDay = firstDay.AddDays(6);
DateTime yearLastDay = new DateTime(year, 12, 31);
if (tempDay > yearLastDay)
ret = yearLastDay;
else
ret = tempDay;
}
return ret;
}
/// <summary>
/// 一年有幾周
/// </summary>
/// <param name="year"></param>
/// <returns></returns>
public static int MaxWeekOfYear(int year)
{
if (year < 1 || year > 9999)
throw new ArgumentException("illegal year", "year");
int maxDays = (DateTime.IsLeapYear(year) ? 366 : 365);
DayOfWeek firstDayOfWeek = new DateTime(year, 1, 1).DayOfWeek;
int beforeFirstSunday = (7 - Convert.ToInt32(firstDayOfWeek)) % 7;
int remainDays = maxDays - beforeFirstSunday;
int ret = (beforeFirstSunday % 7 == 0 ? 0 : 1);
ret += (remainDays / 7);
ret += (remainDays % 7 == 0 ? 0 : 1);
return ret;
}