【发布时间】:2011-07-27 16:29:15
【问题描述】:
给定年、月、日和周数,是否可以得到日期?
e.g. Year = 2010
Month =Jan
Day = Sun
WeekNumber = 3
输出:2010-01-10
我正在 C# 中尝试它
谢谢
【问题讨论】:
-
看起来我下面描述的算法是在重复的帖子中编码的。
标签: c#-3.0
给定年、月、日和周数,是否可以得到日期?
e.g. Year = 2010
Month =Jan
Day = Sun
WeekNumber = 3
输出:2010-01-10
我正在 C# 中尝试它
谢谢
【问题讨论】:
标签: c#-3.0
我会这样:
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);
【讨论】:
我认为在普通的 .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);
【讨论】:
基于 APIs here,难道不能根据给定的信息初始化 DateTime 对象。您需要开发一种算法来获取一年中的确切日期。一个简单的策略是获取该月的第一天,并在此基础上找到该月的第一个星期一。这是该月第 1 周的开始,您可以通过简单循环找到所需的周并找到确切的日期。然后您就会知道您感兴趣的日历日期。
顺便说一句:我假设年/月的 WeekNumber 从该年/月的第一个星期一开始。如果我错了,请有人纠正我。
【讨论】:
也许您应该查看 System.Globalization.Calendar 类。可能有用。
【讨论】: