Ошибка DateTime.ToString со строковым форматом "M" в .NET.

У меня проблема со строковым форматом DateTime. Я думаю, что это ошибка в MS. Можете ли вы объяснить это, и что не так?

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(DateTime.Now.ToString("M"));//return 07 July   <---- WRONG, SEE MSDN
        Console.WriteLine(DateTime.Now.ToString(".M"));//return .7   <---- GOOD
        Console.ReadKey();
    }
}

MSDN

Ответ 1

Из "M" Спецификатор специальных форматов

Если спецификатор формата "M" используется без другого настраиваемого формата спецификаторы, он интерпретируется как стандартный формат даты и времени "M"Спецификатор. Для получения дополнительной информации об использовании спецификатора одиночного формата, см. Использование спецификаций отдельных пользовательских форматов далее в этом разделе.

Из Использование отдельных спецификаторов пользовательского формата

Пользовательская строка формата даты и времени состоит из двух или более персонажи. Методы форматирования даты и времени интерпретируют любые односимвольная строка как стандартная строка формата даты и времени. Если они не распознают символ как допустимый спецификатор формата, они бросьте a FormatException. Например, строка формата, которая состоит из только спецификатор "h" интерпретируется как стандартная дата и время формат. Однако в данном конкретном случае исключение выбрано, потому что нет стандартного формата даты и времени "h" Спецификатор.

Использовать любые пользовательские спецификаторы формата даты и времени как единственные спецификатор в строке формата (то есть для использования "d", "f", "F", "g", "h" , "H", "K", "m", "M" , "s", "t", "y", "z", ":" или "/" Пользовательский формат спецификатор сам по себе), включает пробел до или после спецификатора, или включить спецификатор формата процента ( "%" ) перед одним пользовательским спецификатор даты и времени.

Вот почему вы можете использовать один из них:

Console.WriteLine(DateTime.Now.ToString(" M")); // 7
Console.WriteLine(DateTime.Now.ToString("M ")); //7
Console.WriteLine(DateTime.Now.ToString("%M")); //7