ChineseLunisolarCalendar to GregorianCalendar无效日期

时间:2017-11-20 23:06:03

标签: c# calendar

我试着计算一年中国的“中秋节”公众假期。但是这几年的日期无效,我使用wikipedia的文件(第8个月的第15天

var chineseCalendar = new ChineseLunisolarCalendar();
var midAutumnFestival = chineseCalendar.ToDateTime(year, 8, 15, 0, 0, 0, 0);

2017年和2020年的日期无效,出了什么问题?

Calculated Date | Correct Date
2020.09.02      | 2020.10.01
2017.09.05      | 2017.10.04

1 个答案:

答案 0 :(得分:3)

2017年和2020年有闰月。

https://www.chinesegenderchart.info/leapmonth.php

2017年第6个月跳跃

2020年第四个月闰

现在查看以下文档(https://msdn.microsoft.com/en-us/library/system.globalization.chineselunisolarcalendar%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

  

闰月可以在一年中的任何一个月之后发生。例如,   GetMonth方法返回1到13之间的数字,表示   与指定日期关联的月份。如果有闰月   在一年的第八和第九个月之间,GetMonth方法   第八个月返回8,第八个月返回9个,第10个月返回   第九个月。

根据以上文档,当您在2017年和2020年查询第8个月时,您必须要求9个月代表第8个月。

如下所示:

var chineseCalendar = new ChineseLunisolarCalendar();
var midAutumnFestival = chineseCalendar.ToDateTime(year, 9, 15, 0, 0, 0, 0);