C# 在将公历日期转换为《古兰经》时损失了一天

C# 在将公历日期转换为《古兰经》时损失了一天,c#,datetime,.net-2.0,C#,Datetime,.net 2.0,使用《古拉经》日历获取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 =

使用《古拉经》日历获取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天是错误的(根据这里:)

如果我将代码更改为:

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#项目(.NET2.0),那么日期是15,这是正确的

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

非常感谢您的任何想法。

我已经测试了您的代码:

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));
在.NET4.5中,我得到了
1434/8/15
作为答案。因此,它似乎是.NET2.0中的一个bug


还要检查
umAlQuraCalendar.AlgorithmType
是否为
LunarCalendar
(应该是这样)。因为如果是LunisolarCalendar,可能会有一些类似的细微差异。

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

您始终可以调整hijri日历,因为计算有时不准确,当计算机说明天不是斋月1日,人们在一天结束时看到月亮时,计算结果将更改为与实际日历同步,hijri日历不应该通过方程式计算,而是通过月亮的外观计算。在区域和语言设置的控制面板中,如果您选择hijri日历,您可以设置hijri日期的调整是的,这是我对hijri日历的理解,但我使用的是Um al-Qura日历(),它没有调整系数。是的,在这两种情况下,
umAlQuraCalendar.AlgorithmType
都是
LunarCalendar
。我只是不明白为什么它能在独立的.NET2.0项目中正常工作。它让我觉得这是我的应用程序中的某个东西,而不是.NET 2.0的错误。我还模糊地记得,在我的VB6中,它出现了时间问题。