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()
{