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

#c# #asp.net #datetime #datetimeformatinfo

#c# #asp.net #дата и время #datetimeformatinfo

Вопрос:

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

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

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

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

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

Комментарии:

1. Чисто предположение, однако в лунных календарях (например, еврейских) високосный месяц вставляется каждые столько-то лет из-за значительно более коротких месяцев.

2. О, и если сегодня пятница, 13-е число 13-го месяца, даже не включайте свой компьютер.

3. @leppie Обратите внимание, что календари и даты — скользкий путь, поэтому ваш «интересный»… осторожно, здесь есть драконы 🙂

4. @Лассе В. Карлсен: Я стараюсь избегать любых разговоров, содержащих слова ‘posix time’; p

5. Очевидно, что это для недооцененного месяца додекабря.

Ответ №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 ). Поскольку в большинстве случаев используется григорианский календарь, просто не волнуйтесь.

Комментарии:

1. -1: Нет, это ios для лунных календарей, которые время от времени добавляют дополнительный месяц, чтобы избежать слишком большого отклонения от солнечного года.