使用 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
,这就是您逻辑上拥有的所有信息。然后,您可以根据需要从带有LocalDateTime
的LocalDate
中获取一个AtMidnight
-但我坚持使用LocalDate
,直到您真正需要其他东西为止,这样您就可以合成更少的信息。
老实说,我不相信我们目前使这特别简单 - 尽管底层引擎支持足够的计算,我们可以很容易地添加它。
不对 API 进行任何更改,我建议您最好使用以下内容:
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
做很多工作,请提出你想做的事情的功能请求。编辑:就像更新一样,我们现在支持:
LocalDate date = LocalDate.FromWeekYearWeekAndDay(year, week, IsoDayOfWeek.Monday);
关于c# - 来自 Week 和 WeekYear 的 LocalDate,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11342856/