GetMonthName: Valid values are between 1 and 13, i

2020-03-11 04:35发布

I accidentally passed 0 into DateTimeFormatInfo's GetMonthName method:

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

and got a System.ArgumentOutOfRangeException with this error message: Valid values are between 1 and 13, inclusive.

Passing in 1 through to 12 return "January" through to "December" but passing in 13 returns an empty string.

I can see why month numbers are not zero indexed, but what's month 13 for?

3条回答
Deceive 欺骗
2楼-- · 2020-03-11 04:41

It's because calendar objects can accomodate 13 months (to handle calendars based on lunar months), see MSDN:

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

Calendar objects can accommodate calendars with 13 months. For 12-month calendars, the empty string is always returned as the name of the 13th month.

查看更多
Evening l夕情丶
3楼-- · 2020-03-11 04:42

I guess it is used to determine the leap day in the julian calendar ( http://en.wikipedia.org/wiki/Julian_calendar ). As most of use use Gregorian calender just do not worry.

查看更多
我欲成王,谁敢阻挡
4楼-- · 2020-03-11 04:44

According to MSDN

Calendar objects can accommodate calendars with 13 months. For 12-month calendars, the empty string is always returned as the name of the 13th month.

查看更多
登录 后发表回答