2013-06-25 32 views
4

我在使用Um al Qura日历获取C#DateTime对象的日,月和年组件时遇到问题。将公历日期转换为Um al Qura时丢失一天

的代码片段是:

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版本,Platform目标(x86),但看不到任何明显的东西。

任何想法非常感谢。

+0

总是你可以调整回教日历,因为计算有时不准确,当计算机说明天不是斋月的第一天,并且人们在一天结束时看到月亮,那么计算将改变以同步实际日历,回教日历不应该由等式计算,它是通过月亮的外观来计算的。在地区和语言设置的控制面板中,如果您选择回教日历,您可以设置回教日的调整 – ahmedsafan86

+0

是的,这是我对Hijri日历的理解,但我使用的是Um al Qura日历(http:///msdn.microsoft.com/en-us/library/system.globalization.umalquracalendar(v = vs.80).aspx),它没有调整因子。 –

回答

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.AlgorithmType是否为LunarCalendar(应该是这样)。因为如果它是LunisolarCalendar,这可能会有一些细微差别。

+0

是的,在这两种情况下'umAlQuraCalendar.AlgorithmType'都是'LunarCalendar'。我只是困惑,为什么它在独立的.NET 2.0项目中正常工作。它让我觉得它是在我的应用程序中的东西,而不是.NET 2.0的错误 –

+0

另外我还记得VB6时代的一些事情,它有'time'问题。 –

0

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

相关问题