Mientras buscaba soluciones para otra pregunta, me pregunté si era posible usar la Calendarclase .NET para implementar un calendario que no se basara en las convenciones terrestres.
Por ejemplo, el día de Marte es aproximadamente un 2,7% más largo que un día aquí en la Tierra:
Una convención utilizada por los proyectos de aterrizaje de naves espaciales hasta la fecha ha sido realizar un seguimiento de la hora solar local utilizando un "reloj de Marte" de 24 horas en el que las horas, minutos y segundos son un 2,7% más largos que su duración estándar (terrestre).
¿Hay alguna buena manera de poner en práctica una MarsCalendarforma que la longitud de un segundo es diferente de la norma GregorianCalendar, y por lo tanto será capaz de utilizar DateTimeobjetos basados en él durante toda la norma AddDays(), AddHours()etc. funciones? (Nota: Idealmente, una solución, si existe, sería aplicable a cualquier forma de objeto planetario para el que sea posible definir tanto "1 día" como "1 año" de longitudes consistentes. Marte es un gran ejemplo, aunque )

Calendarya admite establecer números arbitrarios de días por año.Calendarclase C # . La misma clase puede ser utilizada por VB.NET o cualquier otro lenguaje .NET. Es laCalendarclase .NET .Respuestas:
Hay varias clases de calendario no gregoriano derivadas del
System.Globalization.Calendarespacio de nombres de Globalización (es decirJapaneseCalendar). Debería poder implementar el suyo. Prepararía una muestra, pero hay 16 métodos abstractos en la clase Calendar ...Incluso podría simplemente derivar su clase
GregorianCalendary simplemente anular elGetMilliseconds(DateTime)método, devolviendo el valor de retorno de la base multiplicado por1.027d.fuente