Alors que je cherchais des solutions pour une autre question, je me suis demandé s'il était possible d'utiliser la Calendar
classe de .NET pour implémenter un calendrier qui n'était pas basé sur les conventions terrestres.
Par exemple, la journée de Mars est environ 2,7% plus longue qu'une journée ici sur Terre:
Une convention utilisée par les projets d'atterrissage d'engins spatiaux à ce jour a été de garder une trace de l'heure solaire locale en utilisant une "horloge de Mars" de 24 heures sur laquelle les heures, minutes et secondes sont 2,7% plus longues que leurs durées standard (Terre).
Est - il un bon moyen de mettre en œuvre une MarsCalendar
telle que la longueur d'une seconde est différente de la norme GregorianCalendar
, et donc être en mesure d'utiliser les DateTime
objets en fonction pour tous les standards AddDays()
, AddHours()
etc. fonctions? (Note: Idéalement, une solution - s'il en existe une - serait applicable à toute forme d'objet planétaire pour laquelle il est possible de définir à la fois "1 jour" et "1 an" de longueurs cohérentes. Mars est un excellent exemple, bien que )
Calendar
prend déjà en charge la définition de nombres arbitraires de jours par an.Calendar
classe C # . La même classe peut être utilisée par VB.NET ou tout autre langage .NET. C'est laCalendar
classe .NET .Réponses:
Il existe plusieurs classes de calendrier non grégorien dérivées de
System.Globalization.Calendar
l'espace de noms Globalization (ieJapaneseCalendar
). Vous devriez pouvoir mettre en œuvre le vôtre. Je préparerais un échantillon, mais il y a 16 méthodes abstraites dans la classe Calendar ...Vous pourriez même être en mesure de dériver simplement votre classe
GregorianCalendar
et de simplement remplacer laGetMilliseconds(DateTime)
méthode, en retournant la valeur de retour de la base multipliée par1.027d
.la source