У нас есть конец Scala/Java, который генерирует эквивалент DateTime.MaxValue
в.NET.
Я получил следующую дату в виде строки "9999-12-31T23: 59: 59.999999999Z".
Если я использовал DateTime.TryParse("9999-12-31T23:59:59.999999999Z", out var dateTime)
, то он выдает DateTime.TryParse("9999-12-31T23:59:59.999999999Z", out var dateTime)
ArgumentOutOfRangeException
(добавленное или вычитаемое значение приводит к не представимому DateTime.Parameter name: value).
Я этого не ожидал, так как я называл Try Parse. Возможно, возвращение ложного было бы более интуитивным?
Если я уменьшу год, я вижу, что.NET переносит дату на следующий день, что, очевидно, не будет работать с максимальной датой/временем!
DateTime.TryParse("9998-12-31T23:59:59.999999999Z", out var dateTime);
dateTime.ToString().Dump();
Выходы: 01/01/9999 00:00:00
Если я уменьшу точность ms на 2, то он работает:
DateTime.TryParse("9998-12-31T23:59:59.9999999Z", out var dateTime);
dateTime.ToString().Dump();
Выходы: 31/12/9998 23:59:59
Это действительно похоже на ошибку в.NET? Это ожидаемое поведение?