diff --git a/Personnummer.Tests/CoordinationNumberTests.cs b/Personnummer.Tests/CoordinationNumberTests.cs
index 929fac1..9566735 100644
--- a/Personnummer.Tests/CoordinationNumberTests.cs
+++ b/Personnummer.Tests/CoordinationNumberTests.cs
@@ -122,7 +122,6 @@ public void TestParseInvalidCn(PersonnummerData ssn)
}));
}
-#if NET8_0_OR_GREATER
[Theory]
[ClassData(typeof(ValidCnDataProvider))]
public void TestAgeCn(PersonnummerData ssn)
@@ -146,7 +145,6 @@ public void TestAgeCn(PersonnummerData ssn)
// Du to age not being possible to fetch from >100 year short format without separator, we aught to check this here.
Assert.Equal(years > 99 ? years - 100 : years, Personnummer.Parse(ssn.ShortFormat, new Personnummer.Options { AllowCoordinationNumber = true, TimeProvider = timeProvider }).Age);
}
-#endif
[Theory]
[ClassData(typeof(ValidCnDataProvider))]
diff --git a/Personnummer.Tests/PersonnummerTests.cs b/Personnummer.Tests/PersonnummerTests.cs
index 6a4de8e..de5bde3 100644
--- a/Personnummer.Tests/PersonnummerTests.cs
+++ b/Personnummer.Tests/PersonnummerTests.cs
@@ -75,8 +75,6 @@ public void TestParseInvalid(PersonnummerData ssn)
}));
}
-
-#if NET8_0_OR_GREATER // Requires TimeProvider.
[Theory]
[ClassData(typeof(ValidSsnDataProvider))]
public void TestAge(PersonnummerData ssn)
@@ -111,8 +109,6 @@ public void TestEdgeCasesAroundBirthday()
Assert.Equal(9, new Personnummer("20800110-8516", new Personnummer.Options() {TimeProvider = timeProvider} ).Age); // Upcoming Birthday tomorrow
}
-#endif
-
[Theory]
[ClassData(typeof(ValidSsnDataProvider))]
public void TestFormat(PersonnummerData ssn)
diff --git a/Personnummer.Tests/TestTimeProvider.cs b/Personnummer.Tests/TestTimeProvider.cs
index e2b67e3..e003612 100644
--- a/Personnummer.Tests/TestTimeProvider.cs
+++ b/Personnummer.Tests/TestTimeProvider.cs
@@ -1,8 +1,12 @@
using System;
-namespace Personnummer.Tests;
-
#if NET8_0_OR_GREATER
+using TimeProvider = System.TimeProvider;
+#else
+using TimeProvider = Personnummer.TimeProvider;
+#endif
+
+namespace Personnummer.Tests;
///
/// TimeProvider which always returns the same date: 2025 01 01 00:00:01 with UTC timezone on local time.
@@ -16,11 +20,5 @@ public class TestTimeProvider : TimeProvider
);
public override DateTimeOffset GetUtcNow()
- {
- return Now;
- }
-
- public override TimeZoneInfo LocalTimeZone { get; } = TimeZoneInfo.Utc;
+ => Now;
}
-
-#endif
diff --git a/Personnummer/Personnummer.cs b/Personnummer/Personnummer.cs
index 4cf7ce9..8855e99 100644
--- a/Personnummer/Personnummer.cs
+++ b/Personnummer/Personnummer.cs
@@ -3,6 +3,12 @@
using System.Text.RegularExpressions;
using Personnummer.Exceptions;
+#if NET8_0_OR_GREATER
+using TimeProvider = System.TimeProvider;
+#else
+using TimeProvider = Personnummer.TimeProvider;
+#endif
+
namespace Personnummer
{
public class Personnummer
@@ -25,7 +31,6 @@ public Options()
///
public bool AllowInterimNumber { get; set; } = false;
-#if (NET8_0_OR_GREATER)
///
/// TimeProvider to use in calculations which are time dependent.
/// Uses `GetLocalNow` method.
@@ -33,12 +38,9 @@ public Options()
/// Defaults to System provider.
///
///
- public TimeProvider TimeProvider { private get; init; } = TimeProvider.System;
+ public TimeProvider TimeProvider { private get; set; } = TimeProvider.System;
internal DateTimeOffset DateTimeNow => TimeProvider.GetLocalNow();
-#else
- internal DateTimeOffset DateTimeNow => DateTimeOffset.Now;
-#endif
}
#region Fields and Properties
diff --git a/Personnummer/TimeProvider.cs b/Personnummer/TimeProvider.cs
new file mode 100644
index 0000000..f11bc32
--- /dev/null
+++ b/Personnummer/TimeProvider.cs
@@ -0,0 +1,21 @@
+using System;
+
+namespace Personnummer;
+
+#if (!NET8_0_OR_GREATER)
+public abstract class TimeProvider
+{
+ public virtual DateTimeOffset GetLocalNow() => GetUtcNow().ToLocalTime();
+
+ public static TimeProvider System { get; }
+ = new FallbackTimeProvider();
+
+ public abstract DateTimeOffset GetUtcNow();
+
+ private sealed class FallbackTimeProvider : TimeProvider
+ {
+ public override DateTimeOffset GetUtcNow()
+ => DateTimeOffset.UtcNow;
+ }
+}
+#endif
\ No newline at end of file