diff --git a/src/Extensions/DateTimeExtensions.cs b/src/Extensions/DateTimeExtensions.cs index 153a8c7..3693a68 100644 --- a/src/Extensions/DateTimeExtensions.cs +++ b/src/Extensions/DateTimeExtensions.cs @@ -8,13 +8,18 @@ namespace WinUI.TableView.Extensions; internal static class DateTimeExtensions { /// - /// Converts a DateTime to a DateTimeOffset using the local time zone. + /// Converts a DateTime to a DateTimeOffset, respecting the DateTime's Kind. + /// Uses UTC offset for UTC DateTimes and local offset otherwise. /// /// The DateTime to convert. /// A DateTimeOffset representing the same point in time as the DateTime. public static DateTimeOffset ToDateTimeOffset(this DateTime dateTime) { - return new DateTimeOffset(dateTime, TimeZoneInfo.Local.GetUtcOffset(dateTime)); + var offset = dateTime.Kind == DateTimeKind.Utc + ? TimeSpan.Zero + : TimeZoneInfo.Local.GetUtcOffset(dateTime); + + return new DateTimeOffset(dateTime, offset); } /// diff --git a/tests/DateTimeExtensionsTests.cs b/tests/DateTimeExtensionsTests.cs index 1a2159b..2a45008 100644 --- a/tests/DateTimeExtensionsTests.cs +++ b/tests/DateTimeExtensionsTests.cs @@ -16,6 +16,15 @@ public void ToDateTimeOffset_FromDateTime_UsesLocalOffset() Assert.AreEqual(expected, dto); } + [TestMethod] + public void ToDateTimeOffset_FromUtcDateTime_UsesZeroOffset() + { + var dt = new DateTime(2024, 1, 2, 3, 4, 5, DateTimeKind.Utc); + var dto = dt.ToDateTimeOffset(); + var expected = new DateTimeOffset(dt, TimeSpan.Zero); + Assert.AreEqual(expected, dto); + } + [TestMethod] public void ToDateTimeOffset_FromTimeSpan_UsesTodayDate() {