6

使用 Um al Qura 日历获取 C# DateTime 对象的日、月和年组件时遇到问题。

代码片段是:

DateTime date = new DateTime(2013, 6, 24);
UmAlQuraCalendar umAlQuraCalendar = new UmAlQuraCalendar();
int year = umAlQuraCalendar.GetYear(date);
int month = umAlQuraCalendar.GetMonth(date);
int day = umAlQuraCalendar.GetDayOfMonth(date);

运行后,年为 1434,月为 8,均正确。但是,第 14 天是错误的(根据此处:http ://www.al-habib.info/islamic-calendar/islamic-calendar-ummulqura-2013.htm )

如果我将代码更改为:

DateTime date = new DateTime(2013, 6, 24, 0, 0, 0, 1); // i.e. One millisecond after midnight
UmAlQuraCalendar umAlQuraCalendar = new UmAlQuraCalendar();
int year = umAlQuraCalendar.GetYear(date);
int month = umAlQuraCalendar.GetMonth(date);
int day = umAlQuraCalendar.GetDayOfMonth(date); 

然后天是 15,这是正确的。

更奇怪的是,这段代码位于大型应用程序的深处:C# 代码是从 VB6 exe 调用的。

如果我将上面的第一个片段提取到一个独立的 C# 项目 (.NET 2.0) 中,那么 day 是 15,这是正确的。

我已经检查了我能想到的两个项目之间可能不同的所有内容:.NET 版本、平台目标 (x86),但看不到任何明显的东西。

任何想法都非常感谢。

4

2 回答 2

0

我已经测试了你的代码:

DateTime date = new DateTime(2013, 6, 24);
UmAlQuraCalendar umAlQuraCalendar = new UmAlQuraCalendar();

int year = umAlQuraCalendar.GetYear(date);
int month = umAlQuraCalendar.GetMonth(date);
int day = umAlQuraCalendar.GetDayOfMonth(date);

Log.Info(string.Format("{0} / {1} / {2}", year, month, day));

在 .NET 4.5 中,我得到1434 / 8 / 15了答案。因此,这似乎是 .NET 2.0 中的一个错误。

还要检查是否umAlQuraCalendar.AlgorithmTypeLunarCalendar(应该是这样)。因为如果是这样LunisolarCalendar,可能会有一些像这样的细微差别。

于 2013-06-25T09:11:14.170 回答
0

解决方案是使用配置值 +1 或 -1 天,然后将此值添加到计算日期以进行更正。

于 2015-08-12T06:57:30.923 回答