将公历日期转换为 Um al Qura 时损失一天

Ken*_*son 6 c# datetime .net-2.0

使用 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);
Run Code Online (Sandbox Code Playgroud)

运行后,年份是 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); 
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

任何想法都非常感谢。

Kav*_*ian 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));
Run Code Online (Sandbox Code Playgroud)

在.NET 4.5 中我得到了1434 / 8 / 15答案。所以看来这是.NET 2.0 中的一个错误。

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