从星期几获取该月的所有日期

时间:2016-12-18 16:47:27

标签: c# date

是否有办法获得指定月份和年份特定日期的所有发生日期..

例如: - 如果我有Day 星期四,那么我需要2016年12月的所有日期。然后收集应包含日期2016年1月12日,2016年12月12日,15/12 / 2016年,2016年12月22日,2016年12月29日。

3 个答案:

答案 0 :(得分:1)

您可以创建一个函数来获取基于特定年份日期的月份日期列表,例如

public static List<DateTime> GetDates(int year, int month,string day)
    {
       return Enumerable.Range(1, DateTime.DaysInMonth(year, month))
            .Where(d=>new DateTime(year, month, d).ToString("dddd").Equals(day))            
           .Select(d => new DateTime(year, month, d)).ToList(); 
    }

现在调用此函数,如

var dates=GetDates(2016,12,"Thursday");
    foreach(var d in dates){
    Console.WriteLine(d.ToString());
    }

输出

  

12/1/2016 12:00:00 AM

     

12/8/2016 12:00:00 AM

     

12/15/2016 12:00:00 AM

     

12/22/2016 12:00:00 AM

     

12/29/2016 12:00:00 AM

现在您拥有基于一天的完整日期列表。您可以根据您的要求进一步使用它。

答案 1 :(得分:0)

DateTime decFirst = new DateTime(2016, 12, 1);
int offset = (int)decFirst.DayOfWeek;
DateTime decThursday = decFirst.AddDays(offset);

现在你有12月的第一个星期四,你应该可以做其余的事。

答案 2 :(得分:0)

长篇版本......

    private void button1_Click(object sender, EventArgs e)
    {
        List<DateTime> Thursdays = DaysOfMonth(2016, 12, DayOfWeek.Thursday);
        foreach(DateTime dt in Thursdays)
        {
            Console.WriteLine(dt.ToString());
        }   
    }

    public static List<DateTime> DaysOfMonth(int year, int month, DayOfWeek day)
    {
        List<DateTime> dates = new List<DateTime>();
        for (int i = 1; i <= DateTime.DaysInMonth(year, month); i++)
        {
            DateTime dt = new DateTime(year, month, i);
            if (dt.DayOfWeek == day)
            {
                dates.Add(dt);
            }
        }
        return dates;
    }