diff --git a/MatFileHandler.Tests/MatFileReaderTests.cs b/MatFileHandler.Tests/MatFileReaderTests.cs
index bdb91e8..b317cf3 100755
--- a/MatFileHandler.Tests/MatFileReaderTests.cs
+++ b/MatFileHandler.Tests/MatFileReaderTests.cs
@@ -434,6 +434,21 @@ namespace MatFileHandler.Tests
Assert.That(str[3], Is.EqualTo("æøå"));
}
+ ///
+ /// Test duration objects.
+ ///
+ [Test]
+ public void TestDuration()
+ {
+ var matFile = GetTests("good")["duration"];
+ var d = matFile["d"].Value as IMatObject;
+ var duration = new DurationAdapter(d);
+ Assert.That(duration.Dimensions, Is.EquivalentTo(new[] { 1, 3 }));
+ Assert.That(duration[0], Is.EqualTo(TimeSpan.FromTicks(12345678L)));
+ Assert.That(duration[1], Is.EqualTo(new TimeSpan(0, 2, 4)));
+ Assert.That(duration[2], Is.EqualTo(new TimeSpan(1, 3, 5)));
+ }
+
private static AbstractTestDataFactory GetTests(string factoryName) =>
new MatTestDataFactory(Path.Combine(TestDirectory, factoryName));
diff --git a/MatFileHandler.Tests/test-data/good/duration.mat b/MatFileHandler.Tests/test-data/good/duration.mat
new file mode 100644
index 0000000..162bbe5
Binary files /dev/null and b/MatFileHandler.Tests/test-data/good/duration.mat differ
diff --git a/MatFileHandler/DurationAdapter.cs b/MatFileHandler/DurationAdapter.cs
new file mode 100644
index 0000000..c7a6a35
--- /dev/null
+++ b/MatFileHandler/DurationAdapter.cs
@@ -0,0 +1,44 @@
+// Copyright 2017-2018 Alexander Luzgarev
+
+using System;
+
+namespace MatFileHandler
+{
+ ///
+ /// A better interface for using duration objects.
+ ///
+ public class DurationAdapter
+ {
+ private readonly int[] dimensions;
+ private readonly double[] data;
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// Source duration object.
+ public DurationAdapter(IArray array)
+ {
+ var matObject = array as IMatObject;
+ if (matObject?.ClassName != "duration")
+ {
+ throw new ArgumentException("The object provided is not a duration.");
+ }
+
+ var dataObject = matObject["millis", 0];
+ data = dataObject.ConvertToDoubleArray();
+ dimensions = dataObject.Dimensions;
+ }
+
+ ///
+ /// Gets duration array dimensions.
+ ///
+ public int[] Dimensions => dimensions;
+
+ ///
+ /// Gets duration object at given position.
+ ///
+ /// Indices.
+ /// Value.
+ public TimeSpan this[params int[] list] => TimeSpan.FromTicks((long)(10000.0 * data[Dimensions.DimFlatten(list)]));
+ }
+}
\ No newline at end of file