2013-06-25 1 views
4

Je rencontre un problème lors de l'obtention des composants jour, mois et année d'un objet C# DateTime à l'aide du calendrier Um al Qura.Perdre un jour lors de la conversion d'une date grégorienne en Um al Qura

Le bout de code est:

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); 

Après avoir exécuté cette année est 1434 et le mois est 8, qui sont tous deux corrects. Cependant, le jour est de 14 ce qui est faux (selon ici: http://www.al-habib.info/islamic-calendar/islamic-calendar-ummulqura-2013.htm)

Si je change le code:

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); 

Puis jour est 15, ce qui est correct. Pour rendre les choses plus étranges, ce code est dans les profondeurs d'une grande application: le code C# est appelé depuis un exe VB6.

Si j'extrait le premier extrait ci-dessus vers un projet C# autonome (.NET 2.0), le jour est 15, ce qui est correct.

J'ai vérifié tout ce que je peux penser qui pourrait être différent entre les deux projets: version .NET, cible de la plate-forme (x86), mais ne peut rien voir d'évident.

Toute pensée grandement appréciée.

+0

Toujours vous pouvez ajuster le calendrier hijri comme les calculs ne sont parfois pas précis, quand l'ordinateur dit demain n'est pas le 1er du Ramadan et les gens voient la lune à la fin de la journée, puis les calculs changent pour synchroniser la réelle calendrier, le calendrier hijri n'était pas censé être calculé par des équations, il est calculé par l'apparition de la lune. dans le panneau de configuration dans les paramètres régionaux et linguistiques si vous choisissez le calendrier hijri, vous pouvez régler l'ajustement du jour hijri – ahmedsafan86

+0

Oui, c'est ma compréhension du calendrier Hijri, mais j'utilise le calendrier Um al Qura (http://msdn.microsoft.com/en-us/library/system.globalization.umalquracalendar(v=vs.80).aspx), qui n'a pas de facteur d'ajustement. –

Répondre

0

Je l'ai testé votre code:

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)); 

Dans .NET 4.5 et je reçois 1434/8/15 comme la réponse. Donc, il semble que c'est un bug dans .NET 2.0.

Vérifiez également si umAlQuraCalendar.AlgorithmType est LunarCalendar (Il devrait en être ainsi). Parce que si c'est LunisolarCalendar, il y a peut-être quelques différences mineures comme ceci.

+0

Oui, dans les deux cas 'umAlQuraCalendar.AlgorithmType' est' LunarCalendar'. Je suis juste confus quant à savoir pourquoi cela fonctionne correctement dans un projet .NET 2.0 autonome. Cela me fait penser que c'est quelque chose dans mon application, plutôt qu'un bug .NET 2.0 –

+0

Aussi, je me souviens vaguement de mes jours VB6 qu'il avait un problème avec 'time'. –

0

La solution pour cela est d'utiliser la valeur de configuration +1 ou -1 Day, puis d'ajouter cette valeur à la date calculée pour la corriger.

Questions connexes