获取C#中给定周数的星期五

时间:2011-09-13 19:35:07

标签: c#

我需要找到一年中给定周数的星期五日期 前(第37周)。

(2011年的第一个周五是1月1日周的周五。  在这种情况下,第一个星期五是2010年12月31日。 )

2 个答案:

答案 0 :(得分:3)

DateTime.Parse("12/31/2010").AddDays(36 * 7);
编辑:我添加了一些其他内容,您可能需要更多内容,这里我生成一个日期列表,然后您可以使用LINQ轻松获得您想要的内容。

    public void DateThing()
    {
        List<DateTime> dateList = new List<DateTime>();
        DateTime start = DateTime.Parse("1/1/2010");

        for (int i = 0; i < 1000; i++)
        {
            dateList.Add(start.AddDays(i));
        }

        var dateYouWant = GetDayOfWeekForGivenYear(DayOfWeek.Friday, 37, 2011, dateList);
    }

    private DateTime GetDayOfWeekForGivenYear(DayOfWeek dayOfWeek, int weekNum, int year, List<DateTime> dateList)
    {
        var days = dateList.Where(w => w.Year == year  && w.DayOfWeek == dayOfWeek);
        var day = days.FirstOrDefault(w => w.DayOfYear >= (weekNum - 1) * 7);

        if (weekNum == 1)
        {
            return day.DayOfYear > (int)day.DayOfWeek ? day.AddDays(-7) : day;
        }
        else if (weekNum == 53 && day == default(DateTime))
        {
            return days.Last(w => w.DayOfWeek == dayOfWeek).AddDays(7);
        }

        return day;
    }

答案 1 :(得分:1)

尝试这样的事情......

    var year = 2011;
    var week = 37;
    var date = new DateTime(year, 1, 1);

    while (date.DayOfWeek != DayOfWeek.Friday) date.AddDays(1); 

    date = date.AddDays(7 * (week - 1));

这假设一年的第1周是第一个星期五的一周。情况可能并非总是如此......您可能希望一年中的第一周成为第一个完整周......或者第一个星期......根据需要进行调整。希望这会有所帮助:)