diff --git a/MatFileHandler.Tests/MatFileReaderTests.cs b/MatFileHandler.Tests/MatFileReaderTests.cs index b317cf3..fd35342 100755 --- a/MatFileHandler.Tests/MatFileReaderTests.cs +++ b/MatFileHandler.Tests/MatFileReaderTests.cs @@ -449,6 +449,19 @@ namespace MatFileHandler.Tests Assert.That(duration[2], Is.EqualTo(new TimeSpan(1, 3, 5))); } + /// + /// Test unrepresentable datetime. + /// + [Test] + public void TestDatetime_Unrepresentable() + { + var matFile = GetTests("good")["datetime-unrepresentable"]; + var obj = matFile["d"].Value as IMatObject; + var datetime = new DatetimeAdapter(obj); + var d0 = datetime[0]; + Assert.That(d0, Is.Null); + } + private static AbstractTestDataFactory GetTests(string factoryName) => new MatTestDataFactory(Path.Combine(TestDirectory, factoryName)); diff --git a/MatFileHandler.Tests/test-data/good/datetime-unrepresentable.mat b/MatFileHandler.Tests/test-data/good/datetime-unrepresentable.mat new file mode 100644 index 0000000..9988076 Binary files /dev/null and b/MatFileHandler.Tests/test-data/good/datetime-unrepresentable.mat differ diff --git a/MatFileHandler/DatetimeAdapter.cs b/MatFileHandler/DatetimeAdapter.cs index c86371f..cbc5e3f 100644 --- a/MatFileHandler/DatetimeAdapter.cs +++ b/MatFileHandler/DatetimeAdapter.cs @@ -57,6 +57,17 @@ namespace MatFileHandler /// /// Indices. /// Value converted to . - public DateTimeOffset this[params int[] list] => epoch.AddMilliseconds(data[Dimensions.DimFlatten(list)]); + public DateTimeOffset? this[params int[] list] + { + get + { + var milliseconds = data[Dimensions.DimFlatten(list)]; + if (milliseconds < -62_135_596_800_000.0 || milliseconds > 253_402_300_799_999.0) + { + return null; + } + return epoch.AddMilliseconds(milliseconds); + } + } } } \ No newline at end of file