diff --git a/src/libraries/System.Private.CoreLib/src/System/Globalization/DateTimeParse.cs b/src/libraries/System.Private.CoreLib/src/System/Globalization/DateTimeParse.cs index 4586b81991871e..6d6a2ff24a724c 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Globalization/DateTimeParse.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Globalization/DateTimeParse.cs @@ -3792,22 +3792,13 @@ private static bool CheckNewValue(scoped ref int currentValue, int newValue, cha private static DateTime GetDateTimeNow(scoped ref DateTimeResult result, scoped ref DateTimeStyles styles) { - if ((result.flags & ParseFlags.CaptureOffset) != 0) + if ((result.flags & (ParseFlags.CaptureOffset | ParseFlags.TimeZoneUsed)) == (ParseFlags.CaptureOffset | ParseFlags.TimeZoneUsed)) { - if ((result.flags & ParseFlags.TimeZoneUsed) != 0) - { - // use the supplied offset to calculate 'Now' - return new DateTime(DateTime.UtcNow.Ticks + result.timeZoneOffset.Ticks, DateTimeKind.Unspecified); - } - else if ((styles & DateTimeStyles.AssumeUniversal) != 0) - { - // assume the offset is Utc - return DateTime.UtcNow; - } + // use the supplied offset to calculate 'Now' + return new DateTime(DateTime.UtcNow.Ticks + result.timeZoneOffset.Ticks, DateTimeKind.Unspecified); } - // assume the offset is Local - return DateTime.Now; + return (styles & DateTimeStyles.AssumeUniversal) != 0 ? DateTime.UtcNow : DateTime.Now; } private static bool CheckDefaultDateTime(scoped ref DateTimeResult result, scoped ref Calendar cal, DateTimeStyles styles) diff --git a/src/libraries/System.Runtime/tests/System.Runtime.Tests/System/DateTimeTests.cs b/src/libraries/System.Runtime/tests/System.Runtime.Tests/System/DateTimeTests.cs index ef51adaecc6a58..a971d5b6f9e28c 100644 --- a/src/libraries/System.Runtime/tests/System.Runtime.Tests/System/DateTimeTests.cs +++ b/src/libraries/System.Runtime/tests/System.Runtime.Tests/System/DateTimeTests.cs @@ -2687,6 +2687,17 @@ public void TestRoundTrippingDateTimeAndFileTime() Assert.Equal(now, roundTrippedDateTime); } + [Fact] + public void TestParseTimeOnlyStringWithAssumeUtcOption() + { + DateTime utcNow1 = DateTime.UtcNow; + DateTime dt = DateTime.Parse("13:30", null, DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal); + DateTime utcNow2 = DateTime.UtcNow; + + // Ensure the parsed date part is in UTC. + Assert.InRange(dt.Date, utcNow1.Date, utcNow2.Date); + } + [Fact] [PlatformSpecific(TestPlatforms.Windows)] public void TestTimeSynchronizationWithTheSystem()