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