Skip to content

DateOnly TryParseExact fails to parse basic ISO-8601 input #123802

@AlmightyLks

Description

@AlmightyLks

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
// True

Expected 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

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions