我有一个扩展方法来获取某个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
https://veckonr.se/kalender/2019
在Bug in WeekNumber calculation .NET?和System.Globalization.Calendar.GetWeekOfYear() returns odd results中发现了类似的问题