-
Notifications
You must be signed in to change notification settings - Fork 5.3k
Description
Description
Ive had to hunt down a bug, where I swapped a DateTime.TryParseExact with a DateOnly.TryParseExact and had to find out, DateOnly refuses to work with DateTimeStyles.AssumeUniversal.
DateOnly.TryParseExact behaves inconsistently compared to DateTime and DateTimeOffset when parsing the same ISO-8601 formatted date string and DateTimeStyles.AssumeUniversal is supplied.
This is either a bug, or a highly misleading API, since (as far as I could find) nothing in the documentation indicates that DateTimeStyles.AssumeUniversal is invalid or unsupported for DateOnly.
Reproduction Steps
using System;
using System.Globalization;
Console.WriteLine("DateTime:");
Console.WriteLine(DateTime.TryParseExact("2064-07-01", "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out _));
Console.WriteLine(DateTime.TryParseExact("2064-07-01", "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out _));
Console.WriteLine("\nDateTimeOffset:");
Console.WriteLine(DateTimeOffset.TryParseExact("2064-07-01", "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out _));
Console.WriteLine(DateTimeOffset.TryParseExact("2064-07-01", "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out _));
Console.WriteLine("\nDateOnly:");
Console.WriteLine(DateOnly.TryParseExact("2064-07-01", "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out _));
Console.WriteLine(DateOnly.TryParseExact("2064-07-01", "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out _));
// Output:
// DateTime:
// True
// True
// DateTimeOffset:
// True
// True
// DateOnly:
// False
// TrueExpected behavior
Return true, parsing the input correctly without failure.
Or alternatively, as others suggested, throw a clear exception.
Actual behavior
Return false, whereas similar (if not under the hood identical) APIs for DateTime and DateTimeOffset return true.
Regression?
No response
Known Workarounds
Use DateTimeStyles.None instead
Configuration
Target Framework: NET 10
SDK: 10.0.102
Arch.: x64
Other information
No response