Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# localdatefromweek和WeekYear_C#_Nodatime - Fatal编程技术网

C# localdatefromweek和WeekYear

C# localdatefromweek和WeekYear,c#,nodatime,C#,Nodatime,使用NodaTime库,如何根据周数和周数计算每周第一天的LocalDate 与此相反: var date = new LocalDate(2012, 1, 1); int weekYear = date.WeekYear; // 2011 int weekNr = date.WeekOfWeekYear; // 52 类似这样的假代码: var newDate = LocalDate.FirstDayFromWeek(weekYear, weekNr); 首先,您应该了解如何构

使用NodaTime库,如何根据周数和周数计算每周第一天的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
,那么这就是逻辑上所有的信息。如果你真的愿意,你可以在午夜用
LocalDate
LocalDate
获取
LocalDateTime
,但我会坚持使用
LocalDate
,直到你真的需要其他任何东西,因为这样你合成的信息就少了

老实说,我不相信我们现在已经把它做得特别简单了——尽管底层引擎支持足够多的计算,我们可以相当容易地添加它

如果不对API进行任何更改,我建议您最好使用以下内容:

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);
}
  • 在所需年份内构建6月1日,该年份应具有相同的
    周日历(我假设您使用的是ISO日历…)
  • 到达一周的第一天(
    date=date.Previous(IsoDayOfWeek.周一)
  • 算出当前周数
  • 加上或减去正确的周数
比如:

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);

以下代码将2018-11-04作为第44周的第一天返回:

LocalDate.FromWeekYearWeekAndDay(2018, 44, IsoDayOfWeek.Sunday);
但返回周编号44以下代码上的日期为2018-10-282018-10-292018-10-302018-10-312018-11-012018-11-022018-11-03:

WeekYearRules
.FromCalendarWeekRule(
    CultureInfo.InvariantCulture.DateTimeFormat.CalendarWeekRule,
    CultureInfo.InvariantCulture.DateTimeFormat.FirstDayOfWeek)
.GetWeekOfWeekYear(new LocalDate(2018, 10, 28));

因此,这两个函数的实现似乎不匹配。对我来说,第二种情况似乎给出了正确的值,而第一种情况可能没有考虑到
日历周规则和
第一周

你检查过这个吗?@V4Vendetta:这是Joda Time,它在日期的构造上更加矛盾。野田时间主要以年/月/日为中心。这并不是说不可能:)谢谢!也许我会创建一个功能请求。注意:为了方便我的代码,我有一个结构:
struct Week{int Year;int WeekNr;}