2013-06-25 36 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天,然後將此值添加到計算日期以更正它。

相關問題