【问题标题】:Get Friday for the given week number in C#在 C# 中获取给定周数的星期五
【发布时间】:2011-09-14 14:39:39
【问题描述】:

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

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

【问题讨论】:

  • 这是一个不错的目标。有什么问题?
  • @AnthonyPegram:“怎么做”?
  • 如上所述,第一个星期五是 2010 年 12 月 31 日。我需要找到第 37 周的星期五日期
  • 使用此函数查找一年中的第一个星期五。公共静态 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); } 返回年份开始; } else { 返回年份开始; } }
  • @srikanth,再次,这是一个不错的目标。你需要找到它。所以找到它。问题的哪一部分阻止了你?例如,从算法上讲,在幼稚的方法中并不太难。查找第一个星期五 -> 添加 n - 1 周数 -> 返回第 nth 个星期五。实施。在你卡住的地方发帖。

标签: c#


【解决方案1】:
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;
    }

【讨论】:

  • 如果您想要一个在未来三年内的日期,这可以正常工作。它不会超过那个..或者如果日期是过去的。每次您只想选择一个日期时,生成一长串日期似乎也非常低效。只需几行代码即可轻松计算日期。
【解决方案2】:

试试这样的...

    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 周是第一个星期五的那一周。情况可能并非总是如此……您可能希望一年中的第一周成为第一周……或第一周……根据需要进行调整。希望这会有所帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多