来自Week和WeekYear的LocalDate
使用NodaTime库,如何根据周数和周WeekYear计算一周中第一天的LocalDate。
与此相反:
var date = new LocalDate(2012, 1, 1); int weekYear = date.WeekYear; // 2011 int weekNr = date.WeekOfWeekYear; // 52
像这样的假代码:
var newDate = LocalDate.FirstDayFromWeek(weekYear, weekNr);
首先,您应该考虑如何构建相关的LocalDate
– 如果您有WeekYear
和WeekOfWeekYear
那么这是您在逻辑上拥有的所有信息。 然后你可以从AtMidnight
的LocalDate
获取一个LocalDateTime
– 但是我会坚持使用LocalDate
直到你真的需要其他任何东西,因为这样你就可以合成更少的信息。
我不相信我们目前使这个特别简单,说实话 – 虽然底层引擎支持足够的计算,我们可以相当容易地添加它。
如果不对API进行任何更改,我建议您最好使用以下内容:
- 在所需的年份内构建6月1日,这应该具有相同的
WeekYear
(我假设您正在使用ISO日历……) - 到达一周的第一天(
date = date.Previous(IsoDayOfWeek.Monday)
) - 计算出当前的周数
- 添加或减去正确的周数
所以类似于:
public static LocalDate LocalDateFromWeekYearAndWeek(int weekYear, int weekOfWeekYear) { LocalDate midYear = new LocalDate(weekYear, 6, 1); LocalDate startOfWeek = midYear.Previous(IsoDayOfWeek.Monday); return startOfWeek.PlusWeeks(weekOfWeekYear - startOfWeek.WeekOfWeekYear); }
不是非常愉快或高效,但也不是太糟糕……如果您发现自己想要在WeekOfWeekYear
和WeekYear
上做很多工作,请提出您想要做的事情的function请求。
编辑:正如更新,我们现在支持这个:
LocalDate date = LocalDate.FromWeekYearWeekAndDay(year, week, IsoDayOfWeek.Monday);