Mentre cercavo soluzioni per un'altra domanda, mi sono ritrovato a chiedermi se fosse possibile utilizzare la Calendar
classe .NET per implementare un calendario che non fosse basato sulle convenzioni terrene.
Ad esempio, il giorno di Marte è circa il 2,7% più lungo di un giorno qui sulla Terra:
Una convenzione utilizzata dai progetti dei lander dei veicoli spaziali fino ad oggi è stata quella di tenere traccia dell'ora solare locale utilizzando un "orologio di Marte" di 24 ore su cui le ore, i minuti ei secondi sono il 2,7% più lunghi della loro durata standard (Terra).
C'è un buon modo per implementare un MarsCalendar
tale che la lunghezza di un secondo è diversa da quella standard GregorianCalendar
, e quindi essere in grado di utilizzare DateTime
oggetti basati su di esso per tutti gli standard AddDays()
, AddHours()
ecc funzioni? (Nota: idealmente, una soluzione, se esiste, sarebbe applicabile a qualsiasi forma di oggetto planetario per il quale è possibile definire sia "1 giorno" che "1 anno" di lunghezze costanti. Marte rappresenta un ottimo esempio, tuttavia )