Jag vill påstå att så länge man använder sig av DateTime/TimeSpan-klasserna i .NET så ska differenser mellan datum följa kalendern. Jag har oerhört svårt att tänka mig att Visual Basic har egna, fristående implementationer som dessutom skiljer sig i logik.
Jag orkar inte engagera mig i Visual Basic, men C# fungerar i alla fall som det ska:
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
// 2100 är inte skottår
int year = 2100;
DateTime last = new DateTime(year, 3, 1);
DateTime first = new DateTime(year, 2, 28);
TimeSpan diff = last - first;
Assert.IsFalse(DateTime.IsLeapYear(year));
Assert.AreEqual(new TimeSpan(1, 0, 0, 0), diff);
// 2019 är inte skottår
year = 2019;
last = new DateTime(year, 3, 1);
first = new DateTime(year, 2, 28);
diff = last - first;
Assert.IsFalse(DateTime.IsLeapYear(year));
Assert.AreEqual(new TimeSpan(1, 0, 0, 0), diff);
// 2020 är skottår
year = 2020;
last = new DateTime(year, 3, 1);
first = new DateTime(year, 2, 28);
diff = last - first;
Assert.IsTrue(DateTime.IsLeapYear(year));
Assert.AreEqual(new TimeSpan(2, 0, 0, 0), diff);
// 2000 är skottår
year = 2000;
last = new DateTime(year, 3, 1);
first = new DateTime(year, 2, 28);
diff = last - first;
Assert.IsTrue(DateTime.IsLeapYear(year));
Assert.AreEqual(new TimeSpan(2, 0, 0, 0), diff);
}
}