Calendar.GetWeekOfYear在瑞典日期失败

时间:2018-08-30 06:45:58

标签: c# datetime week-number .net-4.6.2

我有一个扩展方法来获取某个DateTime的星期数。

public static int WeekOfYear(this DateTime d)
{
  var dfi = new CultureInfo("sv-SE");
  // ReSharper disable once PossibleNullReferenceException
  var cal = dfi.Calendar;
  return cal.GetWeekOfYear(d, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
}

这似乎在2018年12月31日(星期一)失败,据报道为第53周。

第二天为2019年1月1日(星期二)。

结果将是,并非该周中的所有天都具有相同的星期数,这只是一个错误的陈述。

我应该依靠.NET带来的周数计算吗?

[TestMethod]
public void Test30thDec2018()
{
  var date = DateTime.Parse("2018-12-30");
  Assert.AreEqual(52, date.WeekOfYear());
}

[TestMethod]
public void Test31thDec2018()
{
  var date = DateTime.Parse("2018-12-31");
  Assert.AreEqual(DayOfWeek.Monday, date.DayOfWeek);
  Assert.AreEqual(1, date.WeekOfYear()); // fails, actual: 53
}

[TestMethod]
public void Test1stJan2019()
{
  var date = DateTime.Parse("2019-01-01");
  Assert.AreEqual(DayOfWeek.Tuesday, date.DayOfWeek);
  Assert.AreEqual(1, date.WeekOfYear());
}

屏幕截图

在这里我们可以看到2018-12-31应该进入第1周。

https://veckonr.se/kalender/2018-2

dec 2018

https://veckonr.se/kalender/2019

jan 2018

编辑

Bug in WeekNumber calculation .NET?System.Globalization.Calendar.GetWeekOfYear() returns odd results中发现了类似的问题

0 个答案:

没有答案