GetMonthName: Допустимые значения: от 1 до 13 включительно. Зачем?

Я случайно прошел 0 в DateTimeFormatInfo GetMonthName метод:

DateTimeFormatInfo info = new DateTimeFormatInfo();
var monthName = info.GetMonthName(0);

и получил сообщение System.ArgumentOutOfRangeException с этим сообщением об ошибке: Допустимые значения: от 1 до 13 включительно.

Переход от 1 до 12 возвращает "Январь" до "Декабря", но передача в 13 возвращает пустую строку.

Я могу понять, почему номера месяца не нулевые индексируются, но какой месяц 13 для?

Ответ 1

Это потому, что календарные объекты могут вмещать 13 месяцев (для обработки календарей на основе лунных месяцев), см. MSDN:

http://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo.getmonthname.aspx

Объекты календаря могут вмещать календари с 13 месяцами. Для 12-месячных календарей пустая строка всегда возвращается как имя 13-го месяца.

Ответ 2

Согласно MSDN

Объекты календаря могут календари с 13 месяцами. За 12 месяцев календари, пустая строка всегда вернулся как имя 13-го месяц.

Ответ 3

Я предполагаю, что он используется для определения високосного дня в юлианском календаре (http://en.wikipedia.org/wiki/Julian_calendar). Поскольку большая часть использования использует григорианский каландр, просто не беспокойтесь.