From 96aaf6c718d593fbcd82a5ffc953e4c8f063e542 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 25 Jan 2026 18:20:12 +0000 Subject: [PATCH 1/3] Initial plan From c380d0ac4cc448d70eaae2ef859031b0a7e3cf6b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 25 Jan 2026 18:46:21 +0000 Subject: [PATCH 2/3] Add test coverage for DateTime.ParseExact with different DateTimeStyles Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com> --- .../System/DateTimeTests.cs | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) 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 e38018d99a56c2..41b45c8aa2730f 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 @@ -1994,13 +1994,16 @@ public object GetFormat(Type formatType) } } - [Fact] - public static void InvalidDateTimeStyles() + [Theory] + [InlineData(DateTimeStyles.AssumeLocal | DateTimeStyles.AssumeUniversal)] + [InlineData(DateTimeStyles.RoundtripKind | DateTimeStyles.AssumeLocal)] + [InlineData(DateTimeStyles.RoundtripKind | DateTimeStyles.AssumeUniversal)] + [InlineData(DateTimeStyles.RoundtripKind | DateTimeStyles.AdjustToUniversal)] + public static void InvalidDateTimeStyles(DateTimeStyles style) { string strDateTime = "Thursday, August 31, 2006 1:14"; string[] formats = new string[] { "f" }; IFormatProvider provider = new CultureInfo("en-US"); - DateTimeStyles style = DateTimeStyles.AssumeLocal | DateTimeStyles.AssumeUniversal; AssertExtensions.Throws("style", () => DateTime.ParseExact(strDateTime, formats, provider, style)); } @@ -2217,6 +2220,23 @@ public static IEnumerable ParseExact_ValidInput_Succeeds_MemberData() yield return new object[] { " 9 / 8 / 2017 10 : 11 : 12 AM", "M/d/yyyy HH':'mm':'ss tt\' \'", CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces, new DateTime(2017, 9, 8, 10, 11, 12) }; yield return new object[] { " 9 / 8 / 2017 10 : 11 : 12 AM", "M/d/yyyy HH':'mm':'ss tt\' \'", CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces, new DateTime(2017, 9, 8, 10, 11, 12) }; + // RoundtripKind: preserves the UTC kind when parsing UTC strings (indicated by 'Z') + yield return new object[] { "2017-10-11T01:23:45Z", "yyyy-MM-dd'T'HH:mm:ssK", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, new DateTime(2017, 10, 11, 1, 23, 45, DateTimeKind.Utc) }; + yield return new object[] { "2017-10-11T01:23:45.678Z", "yyyy-MM-dd'T'HH:mm:ss.fffK", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, new DateTime(2017, 10, 11, 1, 23, 45, 678, DateTimeKind.Utc) }; + yield return new object[] { "2017-10-11T01:23:45.6789012Z", "O", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, null }; // roundtrip format + + // AssumeLocal: interprets date/time as local when no timezone is specified + yield return new object[] { "2017-10-11 01:23:45", "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, new DateTime(2017, 10, 11, 1, 23, 45, DateTimeKind.Local) }; + yield return new object[] { "9/8/2017 10:11:12 AM", "M/d/yyyy h:mm:ss tt", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, new DateTime(2017, 9, 8, 10, 11, 12, DateTimeKind.Local) }; + + // NoCurrentDateDefault: uses 0001-01-01 instead of current date when date components are missing + yield return new object[] { "10:30:45", "HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.NoCurrentDateDefault, new DateTime(1, 1, 1, 10, 30, 45) }; + yield return new object[] { "3:45 PM", "h:mm tt", CultureInfo.InvariantCulture, DateTimeStyles.NoCurrentDateDefault, new DateTime(1, 1, 1, 15, 45, 0) }; + + // AllowInnerWhite (standalone): allows white space to appear in the middle of the string + yield return new object[] { "2017 - 10 - 11 01:23:45", "yyyy'-'MM'-'dd HH':'mm':'ss", CultureInfo.InvariantCulture, DateTimeStyles.AllowInnerWhite, new DateTime(2017, 10, 11, 1, 23, 45) }; + yield return new object[] { "9 / 8 / 2017 10 : 11 : 12", "M'/'d'/'yyyy HH':'mm':'ss", CultureInfo.InvariantCulture, DateTimeStyles.AllowInnerWhite, new DateTime(2017, 9, 8, 10, 11, 12) }; + if (PlatformDetection.IsNotInvariantGlobalization) { var hebrewCulture = new CultureInfo("he-IL"); From cea601d880f8c71857b92ecad60b7e63940a2ca4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 25 Jan 2026 18:48:20 +0000 Subject: [PATCH 3/3] Simplify format strings per code review feedback Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com> --- .../tests/System.Runtime.Tests/System/DateTimeTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 41b45c8aa2730f..e6316d780f9d0f 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 @@ -2234,8 +2234,8 @@ public static IEnumerable ParseExact_ValidInput_Succeeds_MemberData() yield return new object[] { "3:45 PM", "h:mm tt", CultureInfo.InvariantCulture, DateTimeStyles.NoCurrentDateDefault, new DateTime(1, 1, 1, 15, 45, 0) }; // AllowInnerWhite (standalone): allows white space to appear in the middle of the string - yield return new object[] { "2017 - 10 - 11 01:23:45", "yyyy'-'MM'-'dd HH':'mm':'ss", CultureInfo.InvariantCulture, DateTimeStyles.AllowInnerWhite, new DateTime(2017, 10, 11, 1, 23, 45) }; - yield return new object[] { "9 / 8 / 2017 10 : 11 : 12", "M'/'d'/'yyyy HH':'mm':'ss", CultureInfo.InvariantCulture, DateTimeStyles.AllowInnerWhite, new DateTime(2017, 9, 8, 10, 11, 12) }; + yield return new object[] { "2017 - 10 - 11 01:23:45", "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AllowInnerWhite, new DateTime(2017, 10, 11, 1, 23, 45) }; + yield return new object[] { "9 / 8 / 2017 10 : 11 : 12", "M/d/yyyy HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AllowInnerWhite, new DateTime(2017, 9, 8, 10, 11, 12) }; if (PlatformDetection.IsNotInvariantGlobalization) {