Mientras buscaba soluciones para otra pregunta, me pregunté si era posible usar la Calendar
clase .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 MarsCalendar
forma que la longitud de un segundo es diferente de la norma GregorianCalendar
, y por lo tanto será capaz de utilizar DateTime
objetos 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 )
Calendar
ya admite establecer números arbitrarios de días por año.Calendar
clase C # . La misma clase puede ser utilizada por VB.NET o cualquier otro lenguaje .NET. Es laCalendar
clase .NET .Respuestas:
Hay varias clases de calendario no gregoriano derivadas del
System.Globalization.Calendar
espacio 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
GregorianCalendar
y simplemente anular elGetMilliseconds(DateTime)
método, devolviendo el valor de retorno de la base multiplicado por1.027d
.fuente