Ответ Яна правильный, поскольку день недели не совпадает. Это правильный ответ.
Однако - для потомков я также укажу, что в таком коде все еще есть ошибка високосного года. Рассмотрим следующее:
DateTime dt = new DateTime(2020, 2, 29); // a leap day
string format = "MM/dd"; //any format with month and day but without year
string s = dt.ToString(format, CultureInfo.InvariantCulture);
DateTime result = DateTime.ParseExact(s, format, CultureInfo.InvariantCulture);
Этот код выглядит так, как будто он всегда должен работать, так как формат одинаков как при создании строки, так и при ее разборе. Однако, поскольку год не является частью формата, он будет работать только в високосном году. При выполнении в течение общего года будет выдано FormatException
с сообщением:
DateTime, представленный строкой, не поддерживается в календаре System.Globalization.GregorianCalendar
Это потому, что объект DateTime
должен иметь год, поэтому, если он не был указан, он использует текущий год. Когда я запускаю это сегодня, в 2019 году, он пытается создать дату 2019-02-29
, которой не существует.
Кстати, то же самое может случиться при синтаксическом анализе XML. Тип данных XSD gMonthDay
предоставляет месяц и день без года, помещая дополнительный дефис в позицию года, например "--12-31"
, который можно преобразовать с помощью XmlConvert.ToDateTime
. Обычно он работает со всеми днями года, но XmlConvert.ToDateTime("--02-29")
работает, только если текущий год является високосным, хотя это явно разрешено спецификацией XSD.