Als ich nach Lösungen für eine andere Frage suchte, fragte ich mich, ob es möglich war, mit der .NET- Calendar
Klasse einen Kalender zu implementieren, der nicht auf irdischen Konventionen basierte.
Zum Beispiel ist der Tag des Mars etwa 2,7% länger als ein Tag hier auf der Erde:
Eine Konvention, die bisher von Landerprojekten für Raumfahrzeuge verwendet wurde, bestand darin, die lokale Sonnenzeit mit einer 24-Stunden- "Marsuhr" zu verfolgen, bei der die Stunden, Minuten und Sekunden 2,7% länger sind als ihre Standarddauer (Erde).
Gibt es eine gute Möglichkeit , einen zu implementieren , MarsCalendar
so dass die Länge eines zweiten von der Norm abweicht GregorianCalendar
, und somit in der Lage sein , um den Einsatz DateTime
auf ihnen Objekte basierend für alle Standards AddDays()
, AddHours()
etc. Funktionen? (Hinweis: Idealerweise wäre eine Lösung - falls vorhanden - auf jede Form von Planetenobjekt anwendbar, für die es möglich ist, sowohl "1 Tag" als auch "1 Jahr" mit gleichbleibenden Längen zu definieren. Der Mars ist jedoch ein gutes Beispiel )
Calendar
Unterstützt andererseits bereits das Festlegen beliebiger Tageszahlen pro Jahr.Calendar
-Klasse. Dieselbe Klasse kann von VB.NET oder einer anderen .NET-Sprache verwendet werden. Es ist die .NET-Calendar
Klasse.Antworten:
Es gibt mehrere nicht-gregorianische Kalenderklassen, die aus
System.Globalization.Calendar
dem Globalisierungs-Namespace (dhJapaneseCalendar
) abgeleitet sind. Sie sollten in der Lage sein, Ihre eigenen zu implementieren. Ich würde ein Beispiel zusammenstellen, aber es gibt 16 abstrakte Methoden in der Kalenderklasse ...Möglicherweise können Sie Ihre Klasse sogar einfach von
GregorianCalendar
derGetMilliseconds(DateTime)
Methode ableiten und diese einfach überschreiben , indem Sie den Rückgabewert der Basis multipliziert mit zurückgeben1.027d
.quelle