【问题标题】:Given Year, Month,Day and the Week number, is it possible to get the Date in C#? [duplicate]给定年、月、日和周数,是否可以在 C# 中获取日期? [复制]
【发布时间】:2011-07-27 16:29:15
【问题描述】:

可能重复:
Calculate date from week number

给定年、月、日和周数,是否可以得到日期?

e.g. Year = 2010
     Month =Jan
     Day = Sun
     WeekNumber = 3

输出:2010-01-10

我正在 C# 中尝试它

谢谢

【问题讨论】:

  • 看起来我下面描述的算法是在重复的帖子中编码的。

标签: c#-3.0


【解决方案1】:

我会这样:

        int Year = 2010;
        int Month = 1; //Jan=1, Feb=2, ...
        int Day = 0; //Sun=0, Mon=1, ...
        int WeekNumber = 3; // greater than 0

        DateTime dateValue = new DateTime(Year, Month, 1);            
        int firstDay = (int)dateValue.DayOfWeek;
        dateValue = dateValue.AddDays(Day - firstDay + (WeekNumber - 1) * 7);

【讨论】:

  • 对于一个有效的结果 (((int)dateValue.Month)==Month) 必须保持
【解决方案2】:

我认为在普通的 .NET BCL 中没有这样的日期计算。但是有些库可以帮助您,请参阅 Fluent DateTime。使用这个库,你可以尝试这样的事情:

var firstWeekInYearBeginning = new DateTime(2010, 1, 2).Previous(DayOfWeek.Monday); // note 2 to not miss a week if the year begins on Monday
var expectedDate = 3.Weeks().From(firstWeekInYearBeginning);

【讨论】:

    【解决方案3】:

    基于 APIs here,难道不能根据给定的信息初始化 DateTime 对象。您需要开发一种算法来获取一年中的确切日期。一个简单的策略是获取该月的第一天,并在此基础上找到该月的第一个星期一。这是该月第 1 周的开始,您可以通过简单循环找到所需的周并找到确切的日期。然后您就会知道您感兴趣的日历日期。

    顺便说一句:我假设年/月的 WeekNumber 从该年/月的第一个星期一开始。如果我错了,请有人纠正我。

    【讨论】:

      【解决方案4】:

      也许您应该查看 System.Globalization.Calendar 类。可能有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多