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

C# 在C中获取给定周数的星期五#,c#,C#,我需要找到一年中给定周数的星期五日期 对于ex(第37周) (2011年的第一个星期五是1月1日这一周的星期五。 在这种情况下,第一个星期五是2010年12月31日。 ) 编辑:我还添加了一些东西,您可能还需要一些,这里我将生成一个日期列表,然后您可以使用LINQ轻松获得所需内容 public void DateThing() { List<DateTime> dateList = new List<DateTime>();

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

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

编辑:我还添加了一些东西,您可能还需要一些,这里我将生成一个日期列表,然后您可以使用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;
    }
public void DateThing()
{
列表日期列表=新列表();
DateTime start=DateTime.Parse(“1/1/2010”);
对于(int i=0;i<1000;i++)
{
dateList.Add(start.AddDays(i));
}
var dateYouWant=GetDayOfWeekForGivenYear(DayOfWeek.Friday,37,2011年,日期列表);
}
private DateTime GetDayOfWeekForgiveyEAR(DayOfWeek DayOfWeek,int weekNum,int year,List dateList)
{
var days=日期列表,其中(w=>w.Year==Year&&w.DayOfWeek==DayOfWeek);
var day=days.FirstOrDefault(w=>w.DayOfYear>=(weekNum-1)*7);
如果(周数==1)
{
return day.DayOfYear>(int)day.DayOfWeek?day.AddDays(-7):天;
}
else if(weekNum==53&&day==default(DateTime))
{
返回天数。最后(w=>w.DayOfWeek==DayOfWeek)。添加天数(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;
    }
public void DateThing()
{
列表日期列表=新列表();
DateTime start=DateTime.Parse(“1/1/2010”);
对于(int i=0;i<1000;i++)
{
dateList.Add(start.AddDays(i));
}
var dateYouWant=GetDayOfWeekForGivenYear(DayOfWeek.Friday,37,2011年,日期列表);
}
private DateTime GetDayOfWeekForgiveyEAR(DayOfWeek DayOfWeek,int weekNum,int year,List dateList)
{
var days=日期列表,其中(w=>w.Year==Year&&w.DayOfWeek==DayOfWeek);
var day=days.FirstOrDefault(w=>w.DayOfYear>=(weekNum-1)*7);
如果(周数==1)
{
return day.DayOfYear>(int)day.DayOfWeek?day.AddDays(-7):天;
}
else if(weekNum==53&&day==default(DateTime))
{
返回天数。最后(w=>w.DayOfWeek==DayOfWeek)。添加天数(7);
}
回归日;
}

试试这样的方法

    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));

这就假定一年中的第一周是第一个星期五的一周。情况可能并非总是如此。。。你可能希望一年中的第一周是第一个完整的一周。。或者第一周的第一部分。。。根据需要进行调整。希望这有帮助:)

试试这样的东西

    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));

这就假定一年中的第一周是第一个星期五的一周。情况可能并非总是如此。。。你可能希望一年中的第一周是第一个完整的一周。。或者第一周的第一部分。。。根据需要进行调整。希望这有帮助:)

这是个不错的进球。问题是什么?@AnthonyPegram:“怎么做?”如上所述,第一个星期五是2010年12月31日。我需要使用此函数查找第37个星期五的日期查找一年中的第一个星期五。public static DateTime FirstFirdayOfYear(){var yearStart=new DateTime(DateTime.Now.Year,1,1);if(yearStart.DayOfWeek!=DayOfWeek.Friday){while(yearStart.DayOfWeek!=DayOfWeek.Friday){yearStart=yearStart.AddDays(-1);}return yearStart;}否则{return yearStart;}}@srikanth,同样,这是一个不错的目标。你需要找到它。所以找到它。问题的哪一部分阻止了你?例如,在算法上,用一种简单的方法并不太难。查找第一个星期五->添加n-1周数->返回第n个星期五。实现这一点。在你陷入困境的地方张贴。这是一个不错的进球。问题是什么?@AnthonyPegram:“怎么做?”如上所述,第一个星期五是2010年12月31日。我需要使用此函数查找第37个星期五的日期查找一年中的第一个星期五。public static DateTime FirstFirdayOfYear(){var yearStart=new DateTime(DateTime.Now.Year,1,1);if(yearStart.DayOfWeek!=DayOfWeek.Friday){while(yearStart.DayOfWeek!=DayOfWeek.Friday){yearStart=yearStart.AddDays(-1);}return yearStart;}否则{return yearStart;}}@srikanth,同样,这是一个不错的目标。你需要找到它。所以找到它。问题的哪一部分阻止了你?例如,在算法上,用一种简单的方法并不太难。查找第一个星期五->添加n-1周数->返回第n个星期五。实现这一点。如果你想要一个在未来三年内的约会,这很好。过了那一步就不行了。。或者如果日期是在过去。每次只想选择一个日期时,生成一长串日期列表似乎效率很低。只需几行代码就可以轻松计算日期。如果您希望日期在未来三年内,这一方法很有效。过了那一步就不行了。。或者如果日期是在过去。每次只想选择一个日期时,生成一长串日期列表似乎效率很低。只需几行代码即可轻松计算日期。