Enquanto procurava soluções para outra questão, me perguntei se seria possível usar a Calendar
classe .NET para implementar um calendário que não fosse baseado nas convenções terrestres.
Por exemplo, o dia de Marte é cerca de 2,7% mais longo do que um dia aqui na Terra:
Uma convenção usada por projetos de sondas espaciais até agora tem sido manter o controle da hora solar local usando um "relógio de Marte" de 24 horas no qual as horas, minutos e segundos são 2,7% mais longos do que suas durações padrão (Terra).
Existe alguma boa maneira de implementar uma MarsCalendar
tal forma que o comprimento de um segundo é diferente do padrão GregorianCalendar
, e, assim, ser capaz de usar DateTime
objetos com base nele para todo o padrão AddDays()
, AddHours()
etc. funções? (Nota: Idealmente, uma solução - se houver - seria aplicável a qualquer forma de objeto planetário para o qual seja possível definir "1 dia" e "1 ano" de comprimentos consistentes. Marte é um ótimo exemplo, embora )
Calendar
já suporta a definição de números arbitrários de dias por ano.Calendar
classe C # . A mesma classe pode ser usada por VB.NET ou qualquer outra linguagem .NET. É aCalendar
classe .NET .Respostas:
Existem várias classes de calendário não gregoriano derivadas de
System.Globalization.Calendar
dentro do namespace Globalization (isto éJapaneseCalendar
). Você deve ser capaz de implementar o seu próprio. Eu prepararia uma amostra, mas existem 16 métodos abstratos na classe Calendar ...Você pode até mesmo ser capaz de simplesmente derivar sua classe
GregorianCalendar
e apenas substituir oGetMilliseconds(DateTime)
método, retornando o valor de retorno da base multiplicado por1.027d
.fonte