From 39599c0a9419f7f922e926f9e3d68a3439fb784c Mon Sep 17 00:00:00 2001 From: Vladimir Pecanac Date: Sun, 30 Aug 2026 18:22:38 +0200 Subject: [PATCH] DateTime.Now vs DateTime.UtcNow: retarget net10.0, bump test packages, add Unspecified conversion tests - Both projects net6.0 -> net10.0 - Microsoft.NET.Test.Sdk 16.11.0 -> 18.9.0, MSTest 2.2.7 -> 4.3.3, coverlet.collector 3.1.0 -> 10.0.1 - Two tests pinning the DateTimeKind.Unspecified asymmetry: ToLocalTime() treats an unspecified value as UTC, ToUniversalTime() treats it as local. Written offset-agnostic so they hold in a UTC CI container. --- .../DateTimeNow.Tests.csproj | 10 ++++----- .../DateTimeNow.Tests/DateTimeTests.cs | 22 +++++++++++++++++++ .../DateTimeNowVsDateTimeUtcNow.csproj | 2 +- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/dotnet-datetime/DateTimeNowVsDateTimeUtcNow/DateTimeNow.Tests/DateTimeNow.Tests.csproj b/dotnet-datetime/DateTimeNowVsDateTimeUtcNow/DateTimeNow.Tests/DateTimeNow.Tests.csproj index f72bee824b..7af97066cb 100644 --- a/dotnet-datetime/DateTimeNowVsDateTimeUtcNow/DateTimeNow.Tests/DateTimeNow.Tests.csproj +++ b/dotnet-datetime/DateTimeNowVsDateTimeUtcNow/DateTimeNow.Tests/DateTimeNow.Tests.csproj @@ -1,17 +1,17 @@ - net6.0 + net10.0 enable false - - - - + + + + diff --git a/dotnet-datetime/DateTimeNowVsDateTimeUtcNow/DateTimeNow.Tests/DateTimeTests.cs b/dotnet-datetime/DateTimeNowVsDateTimeUtcNow/DateTimeNow.Tests/DateTimeTests.cs index f50512e983..918ef9b180 100644 --- a/dotnet-datetime/DateTimeNowVsDateTimeUtcNow/DateTimeNow.Tests/DateTimeTests.cs +++ b/dotnet-datetime/DateTimeNowVsDateTimeUtcNow/DateTimeNow.Tests/DateTimeTests.cs @@ -56,5 +56,27 @@ public void LocalDate_ConvertToUTC_ReturnsUTCDate() Assert.IsTrue(now.Kind == DateTimeKind.Local && utc.Kind == DateTimeKind.Utc); } + + [TestMethod] + public void UnspecifiedDate_WhenConvertedToLocalTime_IsTreatedAsUtc() + { + var value = new DateTime(2022, 1, 9, 14, 34, 42); + + var unspecified = DateTime.SpecifyKind(value, DateTimeKind.Unspecified); + var asUtc = DateTime.SpecifyKind(value, DateTimeKind.Utc); + + Assert.AreEqual(asUtc.ToLocalTime(), unspecified.ToLocalTime()); + } + + [TestMethod] + public void UnspecifiedDate_WhenConvertedToUniversalTime_IsTreatedAsLocal() + { + var value = new DateTime(2022, 1, 9, 14, 34, 42); + + var unspecified = DateTime.SpecifyKind(value, DateTimeKind.Unspecified); + var asLocal = DateTime.SpecifyKind(value, DateTimeKind.Local); + + Assert.AreEqual(asLocal.ToUniversalTime(), unspecified.ToUniversalTime()); + } } } \ No newline at end of file diff --git a/dotnet-datetime/DateTimeNowVsDateTimeUtcNow/DateTimeNowVsDateTimeUtcNow/DateTimeNowVsDateTimeUtcNow.csproj b/dotnet-datetime/DateTimeNowVsDateTimeUtcNow/DateTimeNowVsDateTimeUtcNow/DateTimeNowVsDateTimeUtcNow.csproj index 74abf5c976..dfb40caafc 100644 --- a/dotnet-datetime/DateTimeNowVsDateTimeUtcNow/DateTimeNowVsDateTimeUtcNow/DateTimeNowVsDateTimeUtcNow.csproj +++ b/dotnet-datetime/DateTimeNowVsDateTimeUtcNow/DateTimeNowVsDateTimeUtcNow/DateTimeNowVsDateTimeUtcNow.csproj @@ -2,7 +2,7 @@ Exe - net6.0 + net10.0 enable enable